Unhandled rejection SequelizeAccessDeniedError: Access denied for user 'lupeng'@'localhost' (using password: YES)
这是Node
在使用Sequlize
链接Mysql
数据时报的错,关键看冒号后面的错误:访问拒绝,关键是访问拒绝的错误,说明数据库链接这里有问题,数据库链接访问拒绝,要么是没有相应的操做权限,要么是帐号密码错误。javascript
这样就把问题定位在访问权限以及帐号密码错误两点上了,千万不要忘其余方面去找问题了,那样只会是浪费时间。java
1. 用户权限的问题mysql
权限问题从数据库着手,确认用户受权后,是否刷新的权限列表。也就是在使用Grant
命令受权用户后,应该要使用flush privileges
命令,这个是不少人会忽略的问题。sql
若是用户受权没有问题,那么尝试重启mysql服务器。使用命令/etc/init.d/mysql restart
重启mysql服务器,不一样Linux版本重启命令可能不同,我这里是Debain系。shell
若是重启了问题尚未解决,那么可能就不是数据库用户权限的问题了。数据库
2. 帐号密码的问题npm
帐号密码错误,这个问题听起来很扯,可是开发过程当中,不少人会忽略掉。为何这么说?我使用的是config-lite
模块来配置数据库参数,由于会在多个系统环境中切换开发,使用config-lite
模块能够经过简单的环境变量配置,来加载不一样的参数文件。具体用法参照:不一样环境下配置文件使用 - Node实战 - 技术人生 - SegmentFault。json
个人问题就出如今这里,打开一个终端运行项目npm run test
,package.json
文件里配置着test
的运行脚本NODE_ENV=test supervisor --harmony -i views/ ./bin/www
。另打开一个终端,运行数据库同步的命令,同步命令是单独写在一个js
脚本中,脚本里引用了数据链接方法(通用的),链接方法以下:segmentfault
var Sequelize = require('sequelize'); // 引入数据库配置文件 var sqlConfig = require('config-lite')(__dirname).mysql; var sequelize = new Sequelize(sqlConfig.database, sqlConfig.user, sqlConfig.password, { host: sqlConfig.host, dialect: 'mysql', pool: { max: 10, min: 0, idle: 10000 } }); module.exports = sequelize;
因而在同步数据库的时候,老是如标题报错,然而以为没错啊,最后检查才发现问题所在:运行test
脚本里的NODE_ENV
环境变量只在当前终端下才有效,若是要另开一个终端来同步数据库,那么须要在另开的终端里再设置一下环境变量。否则加载的数据库参数是不一致的,也就是说链接数据库的用户名密码是不对的。服务器
完