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
    }
};

本棚.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!');
});
4

2 に答える 2

1

コードには 2 つの問題があります。

まず、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
   }
};

それが役に立てば幸い。

于 2016-06-12T10:29:26.770 に答える