长时间后POST请求被中止

时间:2019-07-24 15:55:16

标签: node.js express file-upload request formidable

我的快速应用程序有一条路由/api/uploadSbml,该路由需要一个multipart/form类型的发布请求,我在其中上传文件。

在本地运行,一切正常,但是当我将代码部署到数字海洋上的服务器时,稳定的2分钟后,该请求被服务器中止。

我尝试使用其他上传库,例如multer,express-fileupload都导致相同的问题。

应用强大的中间件的路由文件:

// Route
const express = require('express')
const formidableMiddleware = require('express-formidable')
const uploadSbmlController = require('../controllers/uploadSbml')
const router = express.Router()

// Formidable middleware for uploading files
router.use(formidableMiddleware({ uploadDir: './' }))

router.post('/', uploadSbmlController)

module.exports = router

使用上载文件的控制器文件:

// Controller
module.exports = function(req, res) {
  if (req.files.file) {
    // do stuff
  } else {
    res.status(500).send('Something went terribly wrong.')
  }
}

服务器将近2分钟后收到错误:

Error: Request aborted
     at IncomingMessage.<anonymous>(/usr/src/app/server/node_modules/formidable/lib/incoming_form.js:122:19)
     at IncomingMessage.emit (events.js:198:13)
     at abortIncoming (_http_server.js:448:9)
     at socketOnClose (_http_server.js:441:3)
     at Socket.emit (events.js:203:15)
     at TCP._handle.close (net.js:606:12)

1 个答案:

答案 0 :(得分:0)

快速搜索“表达两分钟超时”显示Express(实际上是底层的node.js HTTP模块)具有a default two minute timeout

根据the current node.js documentation,可以通过调用server.timeout(<new timeout value in milliseconds>)进行调整。

听起来,您正在上传的文件足够大,尽管它可以在本地网络上快速上传,但是上传到远程服务器需要花费两分钟以上的时间。