使用nodejs sequelize pg.js连接到postgres db时出错“不支持dialect postgres”

时间:2014-04-28 03:08:30

标签: node.js postgresql sequelize.js

我正在尝试建立从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以便它获取正确的文件吗?

1 个答案:

答案 0 :(得分:1)

所以理论上你的代码片段应该可行,但是sequelize代码会抛出一个我怀疑会误导的错误。您需要编辑lib/transaction-manager.js文件,因为它会吞下您需要的错误详细信息。在console.error(err)之前的catch块中添加throw,以确保错误不是其他奇怪的事情,例如您的sequelize安装缺少文件或未正确处理Windows路径或类似那。进行一次更改,重新运行您的代码段,并使用详细信息更新您的问题,如果这不会直接导致根本原因和解决方案。