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’,所以无法认证成功
解决方案
终端启动mysql
1
mysql -u root -p
修改密码认证方式
1
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '这里填root用户密码';
重启权限
1
mysql> flush privileges;
退出mysql
1
mysql> exit;
session报错undefined
报错原因:先发送了res再设置的req的session
1
2
3
4
5router.get('/captcha',function (req,res){
let code = captcha();
res.type("svg").send(code.data);
req.session.captcha = code.text;
})解决方案:交换顺序
1
2
3
4
5router.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映射
解决方案
将localhost映射为127.0.0.1,具体方法略
将mysql配置中host更改为127.0.0.1
1
2
3
4
5
6
7
8
9
10import 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
- 具体原因可以查看这篇博客
- 在node中使用ES Modules规范时,以下全局对象和变量将不可用
解决方案
如果要在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>