私は秘密を保管するために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;
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!');
});
は、keyvault.jsで 'promise'を発行しています。あなたはそれを宣言しましたが、決してそれを呼びませんでした。 –
こんにちはSharma、答えはtqですが、パスワードはPromiseオブジェクトで、client.getSecretが呼び出されないようです... – Alvin
実際、 'db'を作成すると、その時点で約束が保留状態です。解決策は、最初にパスワードを取得してからdbオブジェクトにロードすることができます。 –