【发布时间】:2019-09-15 02:44:48
【问题描述】:
我正在尝试将 Sequelize 连接到本地 mySql 实例。在测试中,我从 Sqlite 开始,它工作得很好。现在我正在切换到 MySql,在我的单元测试中出现访问被拒绝错误。这是一个加载 sequelize 模块的 node.js 项目,环境变量正在使用 .env 进行本地测试。 在项目中,我有一个初始化续集上下文的模型目录:
models/index.js
let sequelize = {};
if (typeof process.env !== 'undefined' && process.env.ENVIRONMENT === 'production') {
sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.PASSWORD,
{ host: process.env.DB_HOST, dialect: process.env.MYSQLDIALECT, port: process.env.DB_PORT });
} else if(process.env !== 'undefined' && process.env.ENVIRONMENT === 'development') {
sequelize = new Sequelize({dialect: process.env.DIALECT, storage: process.env.STORAGE});
}
.env
ENVIRONMENT=production
DB_NAME='MYRDSDataStore'
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER='sqlserviceuser'
DB_PASSWORD='password'
MYSQLDIALECT='mysql'
SQLITEDIALECT='sqlite'
STORAGE='db.sqlite'
主机设置为 127.0.0.1 但我也尝试了 localhost 并收到相同的错误。
index.test.spec.js
describe('Create Audit Table and insert error object', ()=>{
it('Creates audit table and inserts record',()=>{
let errorObject ={
errorCode: '300',
event: 'POST',
userName: 'testUser',
message: 'Error message from test'
}
util.AuditLogger(errorObject)
.then(()=>{
model.Audit.findAll({
attributes: ['errorCode']
}).then((data)=>{
expect(data).to.have.lengthOf.at.least(1);
});
});
});
});
当我运行单元测试时,出现以下异常:
Unhandled rejection SequelizeAccessDeniedError: Access denied for user 'sqlserviceuser'@'localhost' (using password: NO)
用户 sqlserviceuser 是我使用 sql workbench 创建并授予用户 dbo 角色的新用户(因此他们目前拥有完全访问权限)
在终端窗口中我尝试了以下命令:
mysql -h localhost -u sqlserviceuser -p MYRDSDataStore
输入这个然后提示我输入密码,然后我可以登录,然后是登录消息:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 8.0.15 MySQL Community Server - GPL
任何人都可以就 Sequelize 失败的原因或我需要更改什么以允许 Sequelize 连接提供任何建议或想法吗?
谢谢
【问题讨论】:
-
DB_PASSWORD 是否实际设置为 sqlserviceuser 用户的密码?
-
是的,我只是为本地测试设置了一个简单的密码。我看过一些特殊字符引起问题的帖子,所以作为测试,我只使用了一个基本字符密码“密码”,它不会在生产中使用
标签: mysql node.js sequelize.js