2016-06-12 2 views
1

비밀 키 저장소에 azure-keyvault를 사용하고 있습니다. 구성 파일에 비밀 키를 사용하고 싶지만 콜백에 문제가 있습니다. 문제는 bookshelf.js를 호출하기 전에 반환하지 않는 비밀 및 암호는 정의되지 않은입니다 :비밀 키 저장소의 콜백

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; 

은 당신의 코드에 두 가지 문제가 있습니다

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

안녕하세요 Sharma, 대답은 tq이지만 암호는 Promise 객체이며 client.getSecret이 호출하지 않는 것처럼 보입니다 ... – Alvin

+0

예, 실제로 'db'를 만들면 약속이 보류 상태입니다. 솔루션은 먼저 암호를 가져 와서 db 객체에로드 할 수 있습니다. –

답변

1

app.js.

먼저, promise 개체를 선언했지만 결코 호출하지 않았습니다.

이/

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

module.exports = { 
    sqlPassword: sqlPassword 
}; 

ENV를 keyvault.js

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

희망을 development.js, 그것은 도움이됩니다.

+0

나는 이것을 시도했지만, 왜 암호가 promise 객체인지, 암호 대신에 왜 있는지 모릅니다. – Alvin