javascript - NodeJS:关闭 Mongod 会使应用程序崩溃
问题描述
我有一个使用 Mongoose 的 NodeJS 应用程序。Evrything 工作正常,但是当我关闭 Mongod 服务(在 Windows 上)时,我收到以下错误,这使我的应用程序崩溃:
[DB HANDLER] Error...disconnected undefined
events.js:187
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at TCP.onStreamRead (internal/stream_base_commons.js:201:27)
Emitted 'error' event on Connection instance at:
at Socket.<anonymous> (d:\Dev\LinxMainServer\node_modules\mongodb\lib\core\connection\connection.js:325:10)
at Object.onceWrapper (events.js:300:26)
at Socket.emit (events.js:210:5)
at emitErrorNT (internal/streams/destroy.js:92:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
name: 'MongoNetworkError',
[Symbol(mongoErrorContextSymbol)]: {}
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! linxwebserver@0.0.1 compile: `tsc && node build/server.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the linxwebserver@0.0.1 compile script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
我不明白的是我处理了 mongoose.connection 事件,我什至见证了在其他情况下通过“mongoose.connection.on('error', ...)”代码。
以下是我在 DB 处理程序 .js 文件中使用的一段代码:
mongoose.connection.on('error', function(err) {
console.log("[DB HANDLER] Error");
});
mongoose.connection.once('open', function() {
console.log("[DB HANDLER] Connected to MongoDB");
});
mongoose.connection.on('close', function () {
console.log('[DB HANDLER] Error...close');
});
mongoose.connection.on('disconnecting', function (err) {
console.log('[DB HANDLER] Error...disconnect', err);
});
mongoose.connection.on('disconnected', function (err) {
console.log('[DB HANDLER] Error...disconnected', err);
//connect(); // Creates a loop...
});
mongoose.connection.on('parseError', function (err) {
console.log('[DB HANDLER] Error...parse', err);
});
mongoose.connection.on('reconnected', function (err) {
console.log('[DB HANDLER] Reconnected event', err);
});
mongoose.connection.on('reconnectFailed', function (err) {
console.log('[DB HANDLER] reconnectFailed event', err);
});
mongoose.connection.on('connecting', function (err) {
console.log('[DB HANDLER] connecting event', err);
});
mongoose.connection.on('connected', function (err) {
console.log('[DB HANDLER] connected event', err);
});
mongoose.connection.on('timeout', function (err) {
console.log('[DB HANDLER] timeout event', err);
});
mongoose.connection.on('close', function (err) {
console.log('[DB HANDLER] close event', err);
});
const connect = async function() {
console.log('[DB HANDLER] Connect()');
console.log(`[DB HANDLER] Connecting to [${config_handler.config.test_name}] Database`);
/* Get DB URI */
var uri = (config_handler.config.db.instance.uri);
console.log('[DB HANDLER] DB uri: ', uri);
/* Get Mongoose options */
var mongooseOpts = (config_handler.config.db.mongoose_opts);
console.log('[DB HANDLER] mongooseOpts: ', mongooseOpts);
if(mongooseOpts == null || uri == null){
console.log('[DB HANDLER][ERROR] Couldnt get DB configuration from env_rec.json file');
}
/* Connect to DB */
try {
await mongoose.connect(uri, mongooseOpts);
} catch (error) {
console.log("[DB HANDLER][ERROR] Connection error: ", error.reason);
}
}
谢谢
解决方案
推荐阅读
- php - PHP IntlDateFormatter 在不同的服务器上返回不同的值
- r - 为节点内的值抓取html节点?
- r - 将 Inf(数字)写入 excel 并将其读回 R。 Inf 是 char,而不是数字
- css - Google Chart-Table:使用 CSS 格式化特定单元格
- php - 如何删除数组中的元素数组
- javascript - 如何在另一个对象内的函数中使用 this 引用顶级对象
- wikipedia-api - Wikipedia API 有时不返回重定向
- javascript - 为什么我的 snap.svg 拖动元素不能在移动设备上运行?
- ruby-on-rails - ActiveRecord 按关联计数排序,但范围仅限于用户
- plist - 从表中创建 Plist 文件的最快方法