无法使用 sequelize 从本地节点应用程序连接到 Heroku postgresql 数据库

编程入门 行业动态 更新时间:2024-10-24 17:30:42
本文介绍了无法使用 sequelize 从本地节点应用程序连接到 Heroku postgresql 数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试使用 Sequelize 从本地 nodejs 应用程序连接到 Heroku postgresql 数据库.我遵循了这两个指南,在 heroky 服务器端一切正常,但是当我在 Mac 上本地运行它时,我的节点应用程序无法连接到 heroku.

I'm trying to connect to a Heroku postgresql database from a local nodejs app with Sequelize. I followed this two guides an everything is working perfectly fine on the heroky server side, but my node app won't connect to heroku when I run it locally on my Mac.

  • sequelizejs/articles/heroku
  • devcenter.heroku/articles/connecting-to-heroku-postgres-databases-from-outside-of-heroku

这是我如何启动本地应用程序:

Here is how I start the local app:

DATABASE_URL=$(heroku config:get DATABASE_URL) nodemon

抓住我:

Sequelize: Unable to connect to the database:

但是我通过这样做得到了正确的 URL:

But I get the correct URL by doing this:

echo $(heroku config:get DATABASE_URL)

这些命令运行良好:

heroku pg:psql psql $(heroku config:get DATABASE_URL)

这是我的 nodejs 代码:

Here is my nodejs code :

var match = process.env.DATABASE_URL.match(/postgres://([^:]+):([^@]+)@([^:]+):(d+)/(.+)/) sequelize = new Sequelize(match[5], match[1], match[2], { dialect: 'postgres', protocol: 'postgres', port: match[4], host: match[3], logging: false }) sequelize .authenticate() plete(function(err) { if (!!err) { log('Sequelize: Unable to connect to the database:', err); } else { http.listen(process.env.PORT || config.server.port, function(){ log('Web server listening on port '+process.env.PORT || config.server.port); }); } });

我尝试将 native: true 添加到 sequelize 选项,但我得到:

I tried to add native: true to the sequelize options, but then I get:

/Users/clement/Projets/XMM/node_modules/sequelize/lib/sequelize.js:188 throw new Error('The dialect ' + this.getDialect() + ' is not supported. ^ Error: The dialect postgres is not supported. (Error: Please install postgres package manually) at new module.exports.Sequelize (/Users/clement/Projets/XMM/node_modules/sequelize/lib/sequelize.js:188:13) at Object.<anonymous> (/Users/clement/Projets/XMM/server.js:17:14) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:929:3

即使做了:

npm install pg npm install -g pg brew install postgresql

顺便说一下:

var pg = require('pg'); pg.connect(process.env.DATABASE_URL+'?ssl=true', function(err, client, done) { if (err) return console.log(err); client.query('SELECT * FROM pg_catalog.pg_tables', function(err, result) { done(); if(err) return console.error(err); console.log(result.rows); }); });

但我更愿意使用 Sequelize.

But i'd rather use Sequelize.

推荐答案

OK,通过浏览 sequelize 源代码找到答案:github/sequelize/sequelize/blob/master/lib/dialects/postgres/connection-manager.js#L39

OK, found the answer by browsing sequelize source code : github/sequelize/sequelize/blob/master/lib/dialects/postgres/connection-manager.js#L39

要为 PG 连接激活 SSL,您不需要 native: true 或 ssl: true 但需要 dialectOptions.ssl: true 所以以下终于奏效了:

To activate SSL for PG connections you don't need native: true or ssl: true but dialectOptions.ssl: true so the following did finally work:

sequelize = new Sequelize(process.env.DATABASE_URL, { dialect: 'postgres', protocol: 'postgres', dialectOptions: { ssl: true } });

要解决 node-postgres 版本 8 上的 自签名证书 错误sequelizeconnectionerror-self-signed-certificate">SequelizeConnectionError:自签名证书 你可以改用:

To work around the self signed certificate bug on node-postgres version 8 mentioned at SequelizeConnectionError: self signed certificate you can use instead:

sequelize = new Sequelize(process.env.DATABASE_URL, { dialect: 'postgres', protocol: 'postgres', dialectOptions: { ssl: { require: true, rejectUnauthorized: false } } });

更多推荐

无法使用 sequelize 从本地节点应用程序连接到 Heroku postgresql 数据库

本文发布于:2023-10-23 13:45:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1520992.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:节点   连接到   应用程序   数据库   sequelize

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!