gpt4 book ai didi

node.js - 每个路由的 Node Express 特定超时值

转载 作者:搜寻专家 更新时间:2023-10-31 22:38:17 25 4
gpt4 key购买 nike

我正在使用 Express v4.13.4 开发 Node v4.2.4 应用程序。现在我想增加特定上传路径的超时时间。

根据我的阅读和经历:

但是,在尝试实现 connect-timeout 时我迷路了上传路径的中间件。

应用设置

const app = express();
app.use(cors());
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: false }));
app.use(passport.initialize());

app.use('/uploads', uploadRoutes);
app.use(errorHandler);

function errorHandler(err, req, res, next) {
if (err.code && err.code === 'ETIMEDOUT') {
if (!res.headersSent) {
res
.status(408)
.send({
success: true,
message: 'Timeout error'
});
}
}

next(err);
}

const server = app.listen(config.port);

上传路由定义

router.route('/:uploadId/upload-files')
.post(timeout('3m'),
require('./actions/upload-files').prepareHandler,
require('./actions/upload-files').uploadHandler(),
require('./actions/upload-files').responseHandler);

但是,在上传文件时,我确实在 3 分钟后仅在命令行控制台中看到了来自 express-timeout 的错误。请求仍在进行中,没有返回 408 状态码。

4 分钟后,我终于看到 408 状态和“超时错误”作为响应对象的一部分。

对于其他路由的请求,我在 4 分钟后收到 net::ERR_EMPTY_RESPONSE 错误。

如果我记录 server.timeout 的值,则值为 120000(2 分钟)。

我的问题

  • 可能的 4 分钟从何而来?可能是因为前面有一个 OPTIONS 请求?
  • 服务器和套接字超时之间有什么区别以及如何为特定路由正确设置它们?

最佳答案

我已经使用以下路由配置解决了它:

'use strict';

const ms = require('ms');
const express = require('express');
const router = express.Router();

router.route('/upload-files')
.post(
setConnectionTimeout('12h'),
require('./actions/upload-files').responseHandler
);

function setConnectionTimeout(time) {
var delay = typeof time === 'string'
? ms(time)
: Number(time || 5000);

return function (req, res, next) {
res.connection.setTimeout(delay);
next();
}
}

exports.router = router;

其中关键逻辑是以下中间件:

  function (req, res, next) {
res.connection.setTimeout(delay);
next();
}

我希望这份引用资料能对其他人派上用场。

关于node.js - 每个路由的 Node Express 特定超时值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38882237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com