POST 请求在很长一段时间后被中止
POST request being aborted after a long time
我的 Express 应用程序有一个路由 /api/uploadSbml
,它需要一个 multipart/form
类型的 post 请求,我会在其中上传一个文件。
本地运行,一切正常,但是当我将代码部署到数字海洋上的服务器时,请求在稳定的 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)
快速搜索 "express two minute timeout" 显示 Express(实际上是底层 node.js HTTP 模块)具有 a default two minute timeout.
根据the current node.js documentation,这可以通过调用server.timeout(<new timeout value in milliseconds>)
来调整。
听起来您上传的文件足够大,虽然它在您的本地网络上上传速度很快,但上传到远程服务器时却需要两分多钟。
我的 Express 应用程序有一个路由 /api/uploadSbml
,它需要一个 multipart/form
类型的 post 请求,我会在其中上传一个文件。
本地运行,一切正常,但是当我将代码部署到数字海洋上的服务器时,请求在稳定的 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)
快速搜索 "express two minute timeout" 显示 Express(实际上是底层 node.js HTTP 模块)具有 a default two minute timeout.
根据the current node.js documentation,这可以通过调用server.timeout(<new timeout value in milliseconds>)
来调整。
听起来您上传的文件足够大,虽然它在您的本地网络上上传速度很快,但上传到远程服务器时却需要两分多钟。