如何使用异步knexfile



当我试图将配置导出为异步函数时,knex出现了问题。

我的knexfile是:

async function fetchConfiguration() {

return {
staging:{
client: 'mysql',
connection: {
host : 'dbIp',
user : 'user',
password : 'password',
database : 'myDatabase'
}
}
}

}
module.exports = async () => {
const configuration = await fetchConfiguration();
return {
...configuration
}
};

我的connection.js是:

const knex = require('knex');
const configuration = require('../../knexfile');
var connection = knex(configuration.staging);
module.exports = connection;

但是当运行时,我得到这个错误

C:UsersfabioDocumentsProjetos_CVCuptimeuptimeAPInode_modulesknexlibknex.js:22
if (arguments.length === 0 || (!config.client && !config.dialect)) {
^
TypeError: Cannot read property 'client' of undefined
at Knex (C:UsersfabioDocumentsProjetos_CVCuptimeuptimeAPInode_modulesknexlibknex.js:22:42)
at Object.<anonymous> (C:UsersfabioDocumentsProjetos_CVCuptimeuptimeAPIsrcdatabaseconnection.js:4:18)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Module.require (internal/modules/cjs/loader.js:1025:19)
at require (internal/modules/cjs/helpers.js:72:18)
at Object.<anonymous> (C:UsersfabioDocumentsProjetos_CVCuptimeuptimeAPIsrccontrollersCheckController.js:1:20)
at Module._compile (internal/modules/cjs/loader.js:1137:30)

很快我就需要在这个项目中使用vault和Consumer,所以不使用异步创建是很复杂的。我很感激你的帮助。

由于您的配置是异步的,您需要等待它。

这意味着,为了配置连接,您的代码应该始终是异步的。

它应该看起来像:

// dbConfig.js
async function fetchConfiguration() {

return {
staging:{
client: 'mysql',
connection: {
host : 'dbIp',
user : 'user',
password : 'password',
database : 'myDatabase'
}
}
}

}
module.exports = async () => {
const configuration = await fetchConfiguration();
return {
...configuration
}
};
// db.js
const knex = require('knex');
const configuration = require('../../dbConfig');
const config = await configuration();
// --------------^ you are exporting an async function, it must be awaited
const connection = knex(config.staging);
module.exports = connection;

ps,并非所有节点版本都支持顶级等待,请检查您的is是否支持它。如果不支持,您可以像链接中描述的那样用iffe包装代码。

最新更新