отказ от обещания при установке оболочки pgPromise для postgesql db: использование неверного имени db - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь настроить приложение реагирования, которое использует graphql с базой данных postgresql. Прямо сейчас я только пытаюсь настроить pg адаптер для моей существующей базы данных postgresql, которую я размещаю локально. При выполнении 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/.

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 05 апреля 2019

Благодаря комментарию vitaly-t на мой вопрос я обнаружил проблему:

Не удалось пакету dotenv прочитать файлы конфигурации в process.env, потому что файл не был назван явно .env, а скорее толькобыло расширение .env.то есть мой был db.env, который, по-видимому, не является допустимым именем файла конфигурации.Следовательно, после изменения имени файла буквально на .env пакет dotenv отлично читается в конфигах.

Также переполнение стека - это здорово!

...