【问题标题】:promise rejection on setting up pgPromise wrapper for postgesql db: using wrong db name承诺拒绝为 postgresql db 设置 pg Promise 包装器:使用错误的数据库名称
【发布时间】:2019-08-26 05:09:41
【问题描述】:

我正在尝试设置一个使用 graphql 和 postgresql 数据库的反应应用程序。现在我只尝试为我在本地托管的现有 postgresql 数据库设置一个 pg 适配器。运行node pgAdaptor.js 时,我收到一个拒绝的承诺,说数据库不存在,但它说不存在的名称是用户名,而不是正确的数据库名称,即“过滤器”。

我想知道什么可能导致节点尝试使用用户名作为数据库名称??

我正在使用 dotenv 节点包将 db 属性读入 process.env,然后我使用这些属性正确配置服务器,但它仍然尝试连接到相同的用户名。即使我更改了 .env 文件中的配置。

pgAdaptor.js:

require ('dotenv').config ();
const pgPromise = require ('pg-promise');

const pgp = pgPromise ({}); // Empty object means no additional config required

const config = {
  host: process.env.POSTGRES_HOST,
  port: process.env.POSTGRES_PORT,
  database: process.env.POSTGRES_DB,
  user: process.env.POSTGRES_USER,
  password: process.env.POSTGRES_PASSWORD,
};

const db = pgp (config);

exports.db = db;

db.one ('select * from users').then (res => {
  console.log (res);
});

db.env:

POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=filter
POSTGRES_USER=morbidmerve
POSTGRES_PASSWORD=

错误:

(node:2449) UnhandledPromiseRejectionWarning: error: database "morbidmerve" does not exist
    at Connection.parseE (/Users/morbidmerve/dev/test/node_modules/pg/lib/connection.js:601:11)
    at Connection.parseMessage (/Users/morbidmerve/dev/test/node_modules/pg/lib/connection.js:398:19)
    at Socket.<anonymous> (/Users/morbidmerve/dev/test/node_modules/pg/lib/connection.js:120:22)
    at Socket.emit (events.js:197:13)
    at addChunk (_stream_readable.js:288:12)
    at readableAddChunk (_stream_readable.js:269:11)
    at Socket.Readable.push (_stream_readable.js:224:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:145:17)
(node:2449) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:2449) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

当我测试 pgAdaptor.js 功能时,我只是运行

node pgAdaptor.js

我可以确认数据库filter 存在并且每个表上至少包含一条记录。

这应该根据https://blog.harveydelaney.com/setting-up-graphql-express-and-postgresql/ 上的教程工作。

非常感谢任何帮助!

【问题讨论】:

  • 重新检查你的 config 对象中的真实内容,因为这不加起来。
  • 宾果游戏!感谢您的建议....配置对象包含一堆未定义的值。您认为如果配置对象包含正确的值,那么它应该可以正常工作?
  • 是的。当 config 包含未定义的值时,这些值会从默认值替换 - pgp.pg.defaults。这就是你现在可能得到的。

标签: database reactjs promise graphql express-graphql


【解决方案1】:

感谢vitally-t对我的问题的评论,我发现了问题:

dotenv 包未能将配置读入 process.env,因为该文件没有明确命名为“.env”,而是只有一个 .env 扩展名。即我的是db.env,这显然不是一个有效的配置文件名。因此,在将文件名更改为字面意义上的.env 之后,dotenv 包在配置中完美读取。

堆栈溢出也很棒!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-18
    • 2020-06-06
    • 2016-09-30
    • 2019-02-08
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    相关资源
    最近更新 更多