【问题标题】:Error connecting to a postgres db with nodejs sequelize pg.js "the dialect postgres is not supported"使用nodejs sequelize pg.js连接到postgres db时出错“不支持方言postgres”
【发布时间】:2014-04-28 12:11:42
【问题描述】:

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

【问题讨论】:

  • 好的,所以现在要保持理智,请确保您使用的是绝对最新版本的 sequelize。 master 中的代码看起来应该可以正常工作。 github.com/sequelize/sequelize/blob/…
  • 我昨天下载了它,使用 npm install --save sequelize 并在我的 package.json 中添加了“^1.7.3”版本。但是,我检查了您的链接和我的 connector-managers.js 文件,并且缺少该特定行,因此将尝试卸载并重新安装以查看这是否有所不同,否则将手动修改它并在 Sequelize 的 github 上报告问题。谢谢@PeterLyons

标签: node.js postgresql sequelize.js


【解决方案1】:

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

【讨论】:

  • 不起作用,我得到完全相同的错误。如果我不指明这个选项,Sequelize 怎么知道它需要使用 pg.js 而不是 pg 模块?
  • 如果我错了,请纠正我,但这里提到了我作为选项指出的内容:github.com/sequelize/sequelize/wiki/… 我不是发明它,也许我不知道如何使用它,这是肯定的!
  • 啊,所以 sequelize 似乎正在吞噬可能解释 WTF 确实是问题的错误。答案再次更新。
  • 按要求编辑。感谢您的帮助。
猜你喜欢
  • 2018-10-16
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2021-06-19
  • 2019-06-06
  • 2019-11-08
  • 2016-08-14
  • 1970-01-01
相关资源
最近更新 更多