用 NodeJS 写了个爬虫,每运行一段时间就会出现 Connection lost: The server closed the connection:

width=533

events.js:292
      throw er; // Unhandled error event
      ^

Error: Connection lost: The server closed the connection.
    at Protocol.end (D:\\www\\webspider\\node_modules\\mysql\\lib\\protocol\\Protocol.j
s:112:13)
    at Socket. (D:\\www\\webspider\\node_modules\\mysql\\lib\\Connection.js
:94:28)
    at Socket. (D:\\www\\webspider\\node_modules\\mysql\\lib\\Connection.js
:526:10)
    at Socket.emit (events.js:327:22)
    at endReadableNT (internal/streams/readable.js:1327:12)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)
Emitted error event on Connection instance at:
    at Connection._handleProtocolError (D:\\www\\webspider\\node_modules\\mysql\\lib\\
Connection.js:423:8)
    at Protocol.emit (events.js:315:20)
    at Protocol._delegateError (D:\\www\\webspider\\node_modules\\mysql\\lib\\protocol
\\Protocol.js:398:10)

感觉是数据库连接超时了,连接句柄上有一个监听错误的事件:

connection.on(error, function(err) {
  console.log(err.code); // ER_BAD_DB_ERROR
});

connection.query(USE name_of_db_that_does_not_exist);

应该会像 Socket 一样,在出现错误的时候再重新连接。

但是最终我并没有这么做,我使用 pm2 启动应用,然后再这里错误的时候直接 progress.exit() 退出脚本,然后 pm2 会自动重新启动,这样感觉比较省事!

© 版权声明
评论 抢沙发

请登录后发表评论