首页 > 解决方案 > 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);
  }
}

谢谢

标签: javascriptnode.jsmongodbmongoose

解决方案


推荐阅读