node.js - Sequelize 仅与 localhost 连接
问题描述
我正在将 Sequelize 与 nodejs 代码集成,以下是我的 Sequelize 配置:
'use strict';
const Sequelize = require('sequelize');
const config = require('../config');
const sequelize = new Sequelize(config.mysql.database,
config.mysql.username,
config.mysql.password, {
host: 'example.amazonaws.com',
dialect: config.mysql.dialect,
port: config.mysql.pool,
pool: { max: config.mysql.pool.max, min: config.mysql.pool.min, acquire: 1000000, idle: 10000 }
});
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
debugger;
console.error('Unable to connect to the database:', err);
});
module.exports = sequelize
我的 config.js 看起来像这样:
module.exports = {
postgres: {
username: "root",
password: "secret",
database: "secret",
host: "example.amazonaws.com",
port: "5439",
dialect: "pg",
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
},
mysql: {
username: "root",
password: "secret",
database: "secret",
host: "example.amazonaws.com",
port: "3306",
dialect: "mysql",
operatorsAliases: false,
pool: {
max: 20,
min: 5,
acquire: 30000,
idle: 10000
}
}
}
但是连接时出现以下错误:-
< Unable to connect to the database: { SequelizeConnectionError: connect EADDRNOTAVAIL 127.0.0.1 - Local (0.0.0.0:61300)
< at Promise.tap.then.catch.err (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:133:19)
< at tryCatcher (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/util.js:16:23)
< at Promise._settlePromiseFromHandler (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/promise.js:517:31)
< at Promise._settlePromise (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/promise.js:574:18)
< at Promise._settlePromise0 (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/promise.js:619:10)
< at Promise._settlePromises (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/promise.js:695:18)
< at _drainQueueStep (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/async.js:138:12)
< at _drainQueue (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/async.js:131:9)
< at Async._drainQueues (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/async.js:147:5)
< at Immediate.Async.drainQueues [as _onImmediate] (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/async.js:17:14)
< at runCallback (timers.js:705:18)
< at tryOnImmediate (timers.js:676:5)
< at processImmediate (timers.js:658:5)
< name: 'SequelizeConnectionError',
< parent:
< { Error: connect EADDRNOTAVAIL 127.0.0.1 - Local (0.0.0.0:61300)
< at internalConnect (net.js:872:16)
< at defaultTriggerAsyncIdScope (internal/async_hooks.js:294:19)
< at GetAddrInfoReqWrap.emitLookup [as callback] (net.js:1019:9)
< at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:61:10)
< errno: 'EADDRNOTAVAIL',
< code: 'EADDRNOTAVAIL',
< syscall: 'connect',
< address: '127.0.0.1',
< fatal: true },
< original:
< { Error: connect EADDRNOTAVAIL 127.0.0.1 - Local (0.0.0.0:61300)
< at internalConnect (net.js:872:16)
< at defaultTriggerAsyncIdScope (internal/async_hooks.js:294:19)
< at GetAddrInfoReqWrap.emitLookup [as callback] (net.js:1019:9)
< at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:61:10)
< errno: 'EADDRNOTAVAIL',
< code: 'EADDRNOTAVAIL',
< syscall: 'connect',
< address: '127.0.0.1',
< fatal: true } }
< { SequelizeConnectionError: connect EADDRNOTAVAIL 127.0.0.1 - Local (0.0.0.0:61303)
< at Promise.tap.then.catch.err (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:133:19)
< at tryCatcher (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/util.js:16:23)
< at Promise._settlePromiseFromHandler (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/promise.js:517:31)
< at Promise._settlePromise (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/promise.js:574:18)
< at Promise._settlePromise0 (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/promise.js:619:10)
< at Promise._settlePromises (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/promise.js:695:18)
< at _drainQueueStep (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/async.js:138:12)
< at _drainQueue (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/async.js:131:9)
< at Async._drainQueues (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/async.js:147:5)
< at Immediate.Async.drainQueues [as _onImmediate] (/Users/atul/Documents/Workspace/lamda/dealer-rating/node_modules/bluebird/js/release/async.js:17:14)
< at runCallback (timers.js:705:18)
< at tryOnImmediate (timers.js:676:5)
< at processImmediate (timers.js:658:5)
< name: 'SequelizeConnectionError',
< parent:
< { Error: connect EADDRNOTAVAIL 127.0.0.1 - Local (0.0.0.0:61303)
< at internalConnect (net.js:872:16)
< at defaultTriggerAsyncIdScope (internal/async_hooks.js:294:19)
< at GetAddrInfoReqWrap.emitLookup [as callback] (net.js:1019:9)
< at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:61:10)
< errno: 'EADDRNOTAVAIL',
< code: 'EADDRNOTAVAIL',
< syscall: 'connect',
< address: '127.0.0.1',
< fatal: true },
< original:
< { Error: connect EADDRNOTAVAIL 127.0.0.1 - Local (0.0.0.0:61303)
< at internalConnect (net.js:872:16)
< at defaultTriggerAsyncIdScope (internal/async_hooks.js:294:19)
< at GetAddrInfoReqWrap.emitLookup [as callback] (net.js:1019:9)
< at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:61:10)
< errno: 'EADDRNOTAVAIL',
< code: 'EADDRNOTAVAIL',
< syscall: 'connect',
< address: '127.0.0.1',
< fatal: true } }
我已经检查了所有内容,但没有找到任何指向 localhost 的内容。即使我检查了配置,这也是正确的。但是每次它都尝试使用 localhost 而不是 rds。
估计mysql2或者sequelize的版本有问题。
解决方案
您也可以使用 URL 字符串。
describe('Instantiation with a URL string', () => {
it('should accept username, password, host, port, and database', () => {
const sequelize = new Sequelize('mysql://user:pass@example.com:9821/dbname');
const config = sequelize.config;
const options = sequelize.options;
expect(options.dialect).to.equal('mysql');
expect(config.database).to.equal('dbname');
expect(config.host).to.equal('example.com');
expect(config.username).to.equal('user');
expect(config.password).to.equal('pass');
expect(config.port).to.equal('9821');
});
});
如需进一步配置,详情请查看 sequelize 的单元测试。
推荐阅读
- python - 如何在没有辅助 fnc 的情况下递归地反转 python 中的列表
- python - 打印语句不会在 for 循环之后执行
- c# - 使用左连接将 SQL 查询转换为 LINQ 并让
- python - 如何在尝试设置背景颜色时修复“TypeError:Sizer.Add():参数与任何重载调用不匹配:”
- haskell - Haskell 堆栈 - 允许更新启用并且不会关闭?
- android - java.lang.ClassNotFoundException:找不到类“com.my_app_name.androidx”
- c++ - 这个二进制递归排序算法有名字吗?
- python - list.pop() 和 deque.pop() - 有性能差异吗?
- c - 如何修复读取文本文件的错误
- python - 如何在给定两个列表的情况下创建对齐矩阵