Я довольно новичок в мангусте и ноде.Я пытаюсь написать простой API с использованием Nodejs и Express, в котором я отправляю URI MongoDB, и, если он действителен, то есть работает комбинация имени пользователя и пароля, и соединение с этим URI успешно установлено, должно быть возвращено сообщение об успехе.
Сначала я попытался создать отдельную функцию, чтобы попытаться подключиться к указанному URI:
function testURI(uri) {
mongoose.connect(uri, {useNewUrlParser: true} );
mongoose.connection.on("connected", function() { return true } );
}
module.exports.test = function(req, res) {
var uri = req.body.uri;
if(testURI(uri)) res.status(200).json({'success': true});
else res.status(400).json({'success': false});
};
Но это не удалось, поскольку mongoose подключается асинхронно, а обратный вызов события «connected» несмог вернуть true для основной функции
Поэтому я отбросил идею для отдельной функции и вместо этого попытался реализовать ее в функции module.exports.test:
module.exports.test = function(req, res) {
var uri = req.body.uri;
mongoose.connect(uri, { useNewUrlParser: true, connectTimeoutMS: 2500 });
mongoose.connection.on("connected", function() {
mongoose.connection.close();
res.status(200).json({'success': true});
});
mongoose.connection.on("error", function(err) {
result = {
'error': true,
'errorMsg': 'Error: Could not connect to the given host.'
}
mongoose.connection.close();
res.status(400).json(result);
});
};
Это работаетхорошо, за исключением того, что сервер умирает после ответа на один запрос.Когда я пытаюсь использовать недопустимый URI, он возвращает HTTP 400, как и ожидалось, но затем, когда я отправляю другой запрос с другим URI, приложение просто вылетает с ошибкой
Ошибка: невозможно установить заголовкипосле их отправки.
А затем мне нужно перезапустить приложение, прежде чем я смогу отправить другой запрос.Очевидно, две отдельные res.status(200).json
и res.status(400).json
в одном контроллере создают проблему, и приложение обрабатывает последующие запросы также как один и тот же запрос.