banner
我人傻了

关于node的一些报错

Scroll down

MySQL认证失败

  • 报错内容

    1
    "code":"ER_NOT_SUPPORTED_AUTH_MODE","errno":1251,"sqlMessage":"Client does not support authentication protocol requested by server; consider upgrading MySQL client","sqlState":"08004","fatal":true
  • 报错原因

    • mysql8.0默认密码认证方案是‘caching_sha2_password’,而目前node默认的密码认证方案是’mysql_native_password’,所以无法认证成功
  • 解决方案

    1. 终端启动mysql

      1
      mysql -u root -p
    2. 修改密码认证方式

      1
      mysql> alter user 'root'@'localhost' identified with mysql_native_password by '这里填root用户密码';
    3. 重启权限

      1
      mysql> flush privileges;
    4. 退出mysql

      1
      mysql> exit;

session报错undefined

  • 报错原因:先发送了res再设置的req的session

    1
    2
    3
    4
    5
    router.get('/captcha',function (req,res){
    let code = captcha();
    res.type("svg").send(code.data);
    req.session.captcha = code.text;
    })
  • 解决方案:交换顺序

    1
    2
    3
    4
    5
    router.get('/captcha',function (req,res){
    let code = captcha();
    req.session.captcha = code.text;
    res.type("svg").send(code.data);
    })

MySQL连接失败

  • 报错内容

    1
    Error: connect ECONNREFUSED ::1:3306
  • 报错原因

    • localhost没有和127.0.0.1映射
  • 解决方案

    1. 将localhost映射为127.0.0.1,具体方法略

    2. 将mysql配置中host更改为127.0.0.1

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      import mysql from 'mysql'
      let connection = mysql.createConnection({
      host : '127.0.0.1',
      port : 3306,
      user : 'root',
      password : '030605',
      database : 'schema_userInfo'
      });
      connection.connect()
      export default connection

__dirname报错undefined

  • 报错内容

    1
    ReferenceError: __filename is not defined in ES module scope
  • 报错原因

    • 在node中使用ES Modules规范时,以下全局对象和变量将不可用
      • require
      • module.exports
      • exports
      • __filename
      • __dirname
      • NODE_PATH
    • 具体原因可以查看这篇博客
  • 解决方案

    • 如果要在ES Modules规范中使用__dirname

      1
      2
      3
      4
      5
      6
      7
      // import.meta.url 返回模块的绝对的 `file:` URL。
      // url模块中fileURLToPath()函数,返回完全解析的特定于平台的 Node.js 文件路径
      // path模块中dirname()函数,返回路径的目录路径
      import { fileURLToPath } from 'url';
      import { dirname } from 'path';
      const __filename = fileURLToPath(import.meta.url);
      const __dirname = dirname(__filename);

重复设置请求头

  • 报错内容

    1
    Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
  • 报错原因

    • res.send()调用了多次
  • 解决方案

    • res.send()后就return
    • 检查是否是异步的问题导致res.send()调用多次

Uncaught SyntaxError Cannot use import statement outside a module

  • 报错内容

    1
    Uncaught SyntaxError Cannot use import statement outside a module
  • 报错原因

    • 使用了es6的语法, 浏览器默认将它作为js解析会出现问题
  • 解决方案

    • script标签默认为type="text/javascript",需要改为type="module"

      1
      <script type="module" src="public/js/index.js"></script>
Other Articles