首页 > 解决方案 > PostgresQL 不断将我连接到我的“管理员用户名”数据库

问题描述

令我沮丧的是,当我运行“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)
    })

不知道为什么它一直将我连接到一个不存在的数据库。我已经尝试了几个小时,但无法弄清楚。有什么想法吗?

标签: postgresqldatabase-migration

解决方案


对于 knex,您需要添加过期时间,因为它会缓存您的连接信息并每次都重用它。

默认情况下,通过函数接收的配置对象会被缓存并重用于所有连接。要更改此行为,可以将 expireChecker 函数作为配置对象的一部分返回。在尝试创建新连接之前会咨询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 repo

在这里:knex官方


推荐阅读