Node.js 当请求超时时,如何在Express中停止进程?

Node.js 当请求超时时,如何在Express中停止进程?,node.js,express,error-handling,timeout,Node.js,Express,Error Handling,Timeout,当请求超时时,如何在Express中停止进程 安装“连接超时” 从“连接超时”导入超时 // halt_on_timeout.js module.exports = function haltOnTimedout(req, res, next) { if (!req.timedout) next(); }; 昂贵的过程耗时超过30秒 路由超时,但昂贵的\u long\u操作从未停止运行 route.post( 'upload_alot_of_content/' timeout(

当请求超时时,如何在Express中停止进程

安装“连接超时”
从“连接超时”导入超时

// halt_on_timeout.js

module.exports = function haltOnTimedout(req, res, next) {
  if (!req.timedout) next();
};
昂贵的过程耗时超过30秒 路由超时,但
昂贵的\u long\u操作
从未停止运行

route.post(
  'upload_alot_of_content/'
   timeout('30s'),
   haltOnTimedout,
   async (req, res) => {
      const result = await expensive_long_operation();
      if (req.timedout) {
        next('error!')
      }
      res({....})
   })

在nodejs中无法任意停止异步进程,但是您可以实现几个选项来实现您想要的

  • 您可以在一个分叉的nodejs进程中运行昂贵的\u long\u操作,然后在超时时终止该进程
  • 可以将Excel作为一个异步C++模块编写,并建立一个机制,使您能够脱离操作。

  • 到底什么是
    昂贵的\u long\u操作()
    。除非您将它放在另一个进程中,否则您将如何处理尝试取消某个异步进程完全取决于它是什么以及它在等待什么,这需要很长时间。如果它不是异步的,那么它只会占用CPU,其他任何东西都无法运行,因此您必须在长时间运行的代码内部停止它。