Sequelize 是一个 Node.js 的 ORM(对象关系映射),方便开发者进行 SQL 数据库操作。但在使用过程中,有时候会遇到 connect ECONNREFUSED
的错误提示,本文将会针对这个错误进行详细探讨和解决。
错误提示
当使用 Sequelize 连接数据库时,一旦发生错误,可能会出现类似下方的错误提示:
SequelizeConnectionError: connect ECONNREFUSED 127.0.0.1:3306 at Connection.<anonymous> (/var/app/current/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:165:24) at Connection.emit (events.js:203:13) at Socket.<anonymous> (/var/app/current/node_modules/mysql/lib/Connection.js:502:10) at Socket.emit (events.js:203:13) at emitErrorNT (internal/streams/destroy.js:91:8) at emitErrorAndCloseNT (internal/streams/destroy.js:59:3) at process._tickCallback (internal/process/next_tick.js:63:19)
错误原因
造成 connect ECONNREFUSED
错误的原因有很多,如:
- 数据库未开启或端口未设置或端口不正确。
- 防火墙或安全组等问题导致的连接禁止。
- 数据库连接配置错误,如用户名或密码不正确等。
解决方案
由于错误原因各不相同,因此需要具体问题具体分析。下面以最常见的数据库未开启或端口未设置或端口不正确为例进行详细解决方案:
1. 数据库未开启
可以通过以下方式检查数据库是否开启:
在终端使用
mysql
命令检查是否能够登录:$ mysql -u root -p
注意: 这里的用户名和密码需要替换成你自己的。
如果不能登录,说明数据库未开启,需要开启数据库,例如:
$ sudo service mysql start
使用 MySQL Workbench 打开 MySQL 管理界面,如果连接失败,则说明数据库未开启。
2. 端口未设置或端口不正确
确认数据库端口是否正确,一般情况下 MySQL 默认端口是 3306。
检查 Sequelize 连接数据库时的端口是否正确,代码如下:
const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', port: 3306, dialect: 'mysql', operatorsAliases: false });
3. 防火墙或安全组等问题导致连接禁止
检查防火墙或安全组是否阻止了对数据库端口的请求:
- 如果是在本地上,可以关闭系统防火墙,命令如下:
$ sudo service firewalld stop #关闭系统防火墙
- 如果是在云服务器上,可以到控制台进行相应的安全组设置。
4. 数据库连接配置错误
检查数据库连接配置是否正确,如用户名或密码是否正确等。
示例代码
下面是一个完整的 Sequelize 连接 MySQL 数据库的示例代码:
-- -------------------- ---- ------- ----- --------- - --------------------- -------------- - --- --------------------- ----------- ----------- - ----- ------------ ----- ----- -------- -------- ----------------- ------ ----- - ---- -- ---- -- -------- ------ ----- ----- -- ---
结论
connect ECONNREFUSED
错误可能是 Sequelize 连接数据库时最常见的错误之一,但由于错误的原因多种多样,因此需要具体问题具体分析,采取相应的解决方案。在使用 Sequelize 进行数据库操作时,一定要根据实际情况进行具体配置,保证顺利进行相关操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671e35582e7021665ef6cee4