在azure密钥库上的回调
问题描述:
我正在使用azure-keyvault来存储密钥,我想在我的配置文件中使用密钥,但在回调中遇到一些问题。问题是秘密调用bookshelf.js之前没有回来,密码为未定义:在azure密钥库上的回调
config.js:
var environment = process.env.NODE_ENV || 'development';
module.exports = require('./env/' + environment + '.js');
keyvault.js:
var sqlPassword = function(){
var promise = new Promise(
function resolver(resolve, reject) {
var secretId = secrectUri + 'secrets/password';
client.getSecret(secretId, function(err, result) {
if (err) throw err;
resolve(result.value);
});
}
);
};
module.export = {
sqlPassword: sqlPassword()
};
env/development.js
var secret = require('../keyvault');
module.exports = {
db: {
client: 'mysql',
connection: {
host : '127.0.0.1',
user : 'sa',
password : secret.sqlPassword,
database : 'avin',
charset : 'utf8'
},
debug: true
}
};
bookshelf.js
var config = require('./config');
var knex = require('knex')(config.db);
var bookshelf = require('bookshelf')(knex);
bookshelf.plugin('registry');
module.exports = bookshelf;
app.js
var config = require('./config/config');
var express = require('express');
var app = express();
var bookshelf = require('./config/bookshelf');
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(8000, function() {
console.log('Example app listening on port 8000!');
});
答
有你的代码的两个问题。
首先,您声明promise
对象,但从未调用它。
keyvault.js
var sqlPassword = function(){
//promise code
return promise;
};
module.exports = {
sqlPassword: sqlPassword
};
ENV/development.js
module.exports = {
db: {
//some other code
connection: {
password : secret.sqlPassword().then(function(result){
return result;
}),
},
//some other code
}
};
希望,它帮助。
+0
我试过这个,但我只是不知道为什么密码是一个Promise对象,而不是密码。 – Alvin
与keyvault.js中的'promise'问题。你宣布它,但从未称过它。 –
嗨夏尔马,TQ的答案,但密码是Promise对象,并且看起来像client.getSecret不是调用... – Alvin
是的,实际上当你创建'db'时,那么诺言处于挂起状态。解决方案可以首先获取密码,然后将其加载到db对象中。 –