PostgresQL продолжает связывать меня с моей базой данных "admin username" - PullRequest
0 голосов
/ 06 февраля 2020

Меня огорчает, что когда я запускаю «npm run migrate: test» для переноса моих таблиц в тестовую базу данных, Postgres продолжает выдавать ошибку: «база данных не существует. Даже если я указал соединение как "postgresql: // dunder-mifflin@localhost/imagery-api-test"

Дополнительный код:


    before('make knex instance', () => {
        db = knex({
            client: 'pg',
            connection: "postgresql://dunder-mifflin@localhost/imagery-api-test"
        })
        app.set('db', db)
    })

Не уверен, почему он продолжает связывать меня с несуществующей базой данных. Я пробовал несколько часов и не могу понять. Есть мысли?

1 Ответ

0 голосов
/ 06 февраля 2020

Для knex вы хотели бы добавить срок действия, так как он кэширует информацию о вашем соединении и использует ее каждый раз.

По умолчанию объект конфигурации, полученный через функцию, кэшируется и повторно используется для всех соединений. Чтобы изменить это поведение, функция expirationChecker может быть возвращена как часть объекта конфигурации. С expirationChecker консультируются перед попыткой создания новых соединений, и в случае, если он возвращает значение true, извлекается новый объект конфигурации. Например, для работы с токеном аутентификации, который имеет ограниченный срок службы:

var knex = require('knex')({
  client: 'postgres',
  connection: async () => {
    const { token, tokenExpiration } = await someCallToGetTheToken();
    return {
      host : 'your_host',
      user : 'your_database_user',
      password : token,
      database : 'myapp_test',
      expirationChecker: () => {
        return tokenExpiration <= Date.now();
      }
    };
  }
});

Подробнее здесь: git репо

и здесь: knex официальный

...