2016-06-12 8 views
1

Я использую azure-keyvault для хранения секретности, я хотел бы использовать секрет в своем файле конфигурации, но сталкиваюсь с некоторыми проблемами при обратном вызове. Проблема заключается секрет не возвращаться до вызова bookshelf.js и пароль неопределенными:callback on azure key vault

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. Вы это объявили, но никогда не называли это. –

+0

Привет Sharma, tq для ответа, но пароль является объектом Promise и выглядит как client.getSecret не вызывает ... – Alvin

+0

Да, на самом деле, когда вы создаете 'db', в то время обещание находится в ожидающем состоянии. Решение может сначала получить пароль, а затем загрузить его в объект db. –

ответ

1

Есть две проблемы с вашим кодом.

Во-первых, вы объявили объект promise, но никогда его не называли.

keyvault.js

var sqlPassword = function(){ 
    //promise code 
    return promise; 
}; 

module.exports = { 
    sqlPassword: sqlPassword 
}; 

окр/development.js

module.exports = { 
    db: { 
     //some other code 
     connection: { 
     password : secret.sqlPassword().then(function(result){ 
      return result; 
     }), 
     }, 
     //some other code 
    } 
}; 

Надежда, это помогает.

+0

Я пробовал это, но я просто не знаю, почему пароль является объектом Promise, а не паролем. – Alvin