Импорт-AzureKeyVaultCertificate завершается с ошибкой Forbidden

Управляйте пулами соединений mongo в одном автономном модуле. Такой подход обеспечивает два преимущества. Во-первых, он сохраняет ваш код модульным и легче тестировать. Во-вторых, вы не должны смешивать соединение с базой данных в объекте запроса, который НЕ является местом для объекта подключения к базе данных. (Учитывая характер JavaScript, я считаю, что очень опасно смешивать что-либо с объектом, созданным библиотечным кодом). Таким образом, вам нужно только рассмотреть модуль, который экспортирует два метода. connect = () => Promise и get = () => dbConnectionObject.

С таким модулем вы можете сначала подключиться к базе данных

// runs in boot.js or what ever file your application starts with
const db = require('./myAwesomeDbModule');
db.connect()
    .then(() => console.log('database connected'))
    .then(() => bootMyApplication())
    .catch((e) => {
        console.error(e);
        // Always hard exit on a database connection error
        process.exit(1);
    });

. Когда вы в полете ваше приложение может просто вызвать get(), когда это необходимо соединение с DB.

const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example  simple

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

// myAwesomeDbModule.js
let connection = null;

module.exports.connect = () => new Promise((resolve, reject) => {
    MongoClient.connect(url, option, function(err, db) {
        if (err) { reject(err); return; };
        resolve(db);
        connection = db;
    });
});

module.exports.get = () => {
    if(!connection) {
        throw new Error('Call connect first!');
    }

    return connection;
}
0
задан phydeauxman 26 March 2019 в 22:02
поделиться

1 ответ

Проблема заключалась в том, что у Принципала службы был остаточный контекст, у которого не было необходимых разрешений для выполнения действий. Как только я удалил этот контекст, он вызвал новый логин, где я использовал свою учетную запись пользователя, и импорт работал.

0
ответ дан phydeauxman 26 March 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: