отклонение обещания при настройке оболочки pgPromise для postgesql db: использование неправильного имени базы данных

#database #reactjs #promise #graphql #express-graphql

#База данных #reactjs #обещание #graphql #экспресс-graphql

Вопрос:

Я пытаюсь настроить приложение react, которое использует graphql с базой данных postgresql. Прямо сейчас я только пытаюсь настроить адаптер pg для моей существующей базы данных postgresql, которую я размещаю локально. При запуске node pgAdaptor.js я получаю отклоненное обещание, в котором говорится, что база данных не существует, но имя, о котором говорится, что не существует, является именем пользователя, а не правильным именем базы данных, которое является «filter».

Я хочу знать, что могло заставить узел пытаться использовать имя пользователя в качестве имени базы данных??

Я использую пакет узла dotenv для чтения свойств базы данных в 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. Повторно проверьте, что на самом деле находится в вашем config объекте, потому что это не складывается.

2. бинго! спасибо за предложение …. объект config содержит кучу неопределенных значений. Вы полагаете, что если объект конфигурации содержит правильные значения, то он должен работать нормально?

3. ДА. И когда конфигурация содержит неопределенные значения, они заменяются значениями по умолчанию — pgp.pg.defaults . Это то, что вы, вероятно, получаете сейчас.

Ответ №1:

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

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

Также переполнение стека — это потрясающе!