Мне нужно иметь возможность экспортировать переменные для модуля, запросив значения из redis, однако я не могу понять, как это сделать асинхронно.Экспортные переменные NodeJS из запроса redis
Это то, что я пытался, где GetConfig() является функцией, которая возвращает переменные запрошенные из Redis:
var exports = {};
module.exports = exports;
getconfig(function(config){
exports.ConnectionString = {
Server: config.db.server,
Login: config.db.userName,
Database: config.db.database,
Password: config.db.password,
Port: 1433,
Timeout:10000
};
exports.poolSize = 1000;
exports.poolIdleTimeout = 30000000;
exports.tdsServerPort = 88888;
console.log(exports);
})
Но это не работает. Как я могу вернуть эти экспортные переменные?
Я попытался предложение от @Peter Lyons, используя следующий упрощенный пример:
module.exports = {
ConnectionString: getDb,
poolSize: 1000,
poolIdleTimeout: 30000000,
tdsServerPort: 88888
}
function getDb(cb){
var dat = {
Server:'192.168.42.4',
Login: 'XXXX',
Database: 'MYDB',
Password: 'PASS',
Port: 1433,
Timeout:10000
};
cb(null,dat);
}
но когда она вызывается, она возвращает строку соединения в качестве функции и не оценивается:
{ ConnectionString: [Function: getDb],
poolSize: 1000,
poolIdleTimeout: 30000000,
tdsServerPort: 88888 }
'require' является синхронным. Вызовы базы данных асинхронны. Это ваша основная проблема, с которой вам нужно обратиться. Во втором фрагменте вы ссылаетесь на 'getDb' без парсеров, поэтому он не выполняется, и также нет обратного вызова, поэтому даже если бы он выполнялся, он не работал бы, как вы надеетесь. –