J'utilise azure-keyvault pour stocker le secret, je voudrais utiliser le secret dans mon fichier de configuration, mais confronté à un problème de rappel. Le problème est le secret n'est pas revenir avant d'appeler bookshelf.js et mot de passe est non définie:callback sur 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!');
});
problème avec le 'promise' dans keyvault.js. Vous l'avez déclaré, mais vous ne l'avez jamais appelé. –
Salut Sharma, tq pour la réponse, mais le mot de passe est l'objet Promise, et ressemble à client.getSecret n'est pas appelé ... – Alvin
oui, en fait lorsque vous créez le 'db', à ce moment la promesse est en attente. La solution peut être d'abord récupérer le mot de passe, puis le charger dans l'objet db. –