Я работаю над приложением Angular 7 с MongoDB, Node и Express. Если я запускаю свое приложение Express (с помощью команды npm start) перед подключением к MongoDB (с помощью команды mongod), приложение Express сначала выдает ошибку, поскольку не может установить соединение с MongoDB. Когда MongoDB запущен и запущен, приложение Express сообщает мне, что MongoDB теперь подключен к порту 27017. Однако любые запросы HTTP post, которые я выполняю через мое приложение Angular, заставляют Express возвращать код состояния 200 (который говорит мне, что все в порядке), но MongoDB не может создать документ в результате запроса http post. Как мне убедиться, что MongoDB не только подключен, но и что соединение может успешно создать новый документ, когда я выполняю запрос HTTP после публикации? Я где-то читал, что способность MongoDB сохранять / создавать документ требует наличия открытого соединения. В этом отношении, в чем разница между открытым соединением и подключением MongoDB через порт 27017?
Вот код, который я использую в файле Express app.js для подключения к MongoDB:
var express = require('express');
var mongoose = require('mongoose');
var app = express();
var mongoose_uri = process.env.MONGOOSE_URI || "mongodb://abc:abc123@localhost:27017/databank?authSource=admin";
mongoose.set('debug', true);
mongoose.connect(mongoose_uri);
mongoose.connection.on('connected', ()=>{
console.log('MongoDB connected at port 27017');
});
//Not sure if the mongoose.connection.once is necessary to have, considering I already have mongoose.connection.on above.
mongoose.connection.once('open', ()=>{
console.log('MongoDB connection now open');
})
//MongoDB connection error
mongoose.connection.on('error', (err)=>{
console.log(err);
})
Вот журнал npm, показывающий сначала ошибку соединения, затем успешное соединение, затем несколько запросов Post с кодом состояния 200, но в коллекцию MongoDB ничего не было сохранено.
[nodemon] 1.19.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node ./bin/www`
API Gateway listening at http://localhost:8085/api
Web Server listening at http://localhost:8085/
{ Error: connect ECONNREFUSED 127.0.0.1:27017
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1097:14)
name: 'MongoError',
message: 'connect ECONNREFUSED 127.0.0.1:27017' }
MongoDB connected at port 27017
POST /api/contactus 200 335.509 ms - 18
POST /api/contactus 200 9.082 ms - 18
POST /api/contactus 200 3.916 ms - 18
POST /api/contactus 200 6.268 ms - 18
POST /api/contactus 200 61.876 ms - 18
Конечно, эта проблема была решена, когда я перезапустил свое экспресс-приложение после активного сеанса mongoDB, но у меня не всегда будет такая роскошь, как проверка журналов и способность приложения создавать документы во время работы. Цените некоторые указания.