在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!'); 
}); 
+0

与keyvault.js中的'promise'问题。你宣布它,但从未称过它。 –

+0

嗨夏尔马,TQ的答案,但密码是Promise对象,并且看起来像client.getSecret不是调用... – Alvin

+0

是的,实际上当你创建'db'时,那么诺言处于挂起状态。解决方案可以首先获取密码,然后将其加载到db对象中。 –

有你的代码的两个问题。

首先,您声明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