我正在尝试建立从NodeJs应用程序到Postgres本地数据库的简单连接。 这是我的节点代码index2.js
的内容var fs = require('fs');
var path = require('path');
var PGPASS_FILE = path.join(__dirname, "./.pgpass");
var pgtokens = fs.readFileSync(PGPASS_FILE).toString().trimRight().split(":");
var host = pgtokens[2];
var port = pgtokens[3];
var dbname = pgtokens[4];
var user = pgtokens[0];
var password = pgtokens[1];
var conString = "postgres://"+user+":"+password+"@"+host+":"+port+"/"+dbname;
var pg = require('pg.js');
var Sequelize = require('sequelize');
var sequelize = new Sequelize(dbname, user, password,{
dialectModulePath:"pg.js",
dialect: "postgres",
port: 5432
});
sequelize
.authenticate()
.complete(function (err) {
if (!err) {
console.log('Unable to connect to the database', err);
} else {
console.log('Connection has been establised succesfully!');
}
})
我正在使用模块pg.js
而不是pg
来连接Postgres,我已经测试过它是否有效。
我的问题在于Sequelize。我得到的错误如下:
c:\psql-node\node-modules\sequelize\lib\transaction-manager.js:10
throw new Error("The dialect + sequelize.getDialect()+" is not support
^
Error: The dialect postgres is not suppported.
at new module.exports (c:\psql-node\node_modules\sequelize\lib\transaction-manager.js:10:11)
at new module.exports.Sequelize (c:\psql-node\node_modules\sequelize\lib\sequelize.js:128:31)
at Object.<anonymous> (c:\psql-node\index2.js:16:17)
etc...
说实话,我不确定我是否告诉Sequelize使用'pg.js'
是否正确,这就是dialectModulePath:"pg.js"
行
有什么想法吗?
编辑: 感谢@ peter-lyons,我发现了更多关于这个问题的信息: 我得到的错误几乎相同,但在它表明之前:
[Error: Cannot find module 'pg/lib/connection-parameters'] code: 'MODULE_NOT_FOUND'
这是正常的,因为它的路径应为pg.js/lib/connection-parameters
知道如何修改node_modules\sequelize\lib\sequelize.js
以便它获取正确的文件吗?
答案 0 :(得分:1)
所以理论上你的代码片段应该可行,但是sequelize代码会抛出一个我怀疑会误导的错误。您需要编辑lib/transaction-manager.js
文件,因为它会吞下您需要的错误详细信息。在console.error(err)
之前的catch
块中添加throw
,以确保错误不是其他奇怪的事情,例如您的sequelize安装缺少文件或未正确处理Windows路径或类似那。进行一次更改,重新运行您的代码段,并使用详细信息更新您的问题,如果这不会直接导致根本原因和解决方案。