NodeJS 路由器负载太大

NodeJS Router payload too large

我正在我的 nodejs 应用程序中创建休息端点,如下所示:

在我的 server.js 中,我有以下代码:

var express = require('express');
var app = express();
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ limit: '50mb', extended: true }));
app.use(require('./routes/APIRoutes'));

我还尝试了下面的代码,而不是按照潜在重复问题的建议使用 express.json 和 expres.urlencoded。

var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
app.use(require('./routes/APIRoutes'));

在我的 APIRoutes 文件中,我有以下代码:

/* --- INIT --- */
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
router.use(bodyParser.json({ limit: '50mb' }));
router.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));

var urlencodedParser = bodyParser.urlencoded({ limit: '50mb', extended: true });

router.post('...', urlencodedParser, function (req, res) {
...
});

我尝试了不同的组合和顺序来设置更高的限制。但目前每次我发送 2kb 的有效载荷时,我都会收到 413“(有效载荷太大)”错误。

任何帮助设置限制的正确位置是什么?

我在建议的 TKJohn 副本的一个未被接受的答案中找到了我的问题的解决方案。 我必须添加参数限制,以便我的代码变为:

var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit: 50000 }));

添加后成功了!

我也很乐意从 APIRoutes.js

中删除代码
router.use(bodyParser.json({ limit: '50mb' }));
router.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));

过去几个小时尝试在线查找,但没有找到 413 Payload 的解决方案

原来在 urlencoded.js 中,在 body-parser 模块中还有其他选项可以处理限制。

如果您的参数或数组大小超过默认授予的限制(这数组大小为 100)。

如果您使用的是 express 的最新版本,您可以直接在 express 中使用它。

    let express = require('express');

    let app = express();

    app.use(express.json({limit: '50mb', extended: true}));
    app.use(express.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));

请注意,这仅适用于与 bodyParser 捆绑在一起的 express 版本 (bodyParser4.16.0 版本中被添加回 express

这对我有用

this.express.use(bodyParser.json({ limit: '50mb' }));
this.express.use(bodyParser.urlencoded({ limit: "50mb" ,extended: true, parameterLimit: 50000 }));

我遇到了同样的错误。我已经尝试了所有这些建议或解决方案,但都没有奏效。

你在上传文件吗?

就我而言,我使用的是 multer 并且还使用它上传文件。

解决这个问题的简单方法是不设置 Content-Type。

我的问题是我在 headers 上设置:Content-Type: application/json 并且我 [was] 使用 multer: 所以我的应用程序试图将上传的音频文件解析为 JSON 解决方案:

...
app.use(express.json({limit: '50mb', extended: true}));
app.use(express.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}));
...

...被使用和/或删除时服务器抱怨负载过大。

目前,我的代码正在运行

在我的代码中,根据我的应用案例(文件上传),我的上述解决方案失败了:

const express = require('express');

...

const app = express();

app.use(express.json());
...

...它正在工作,因为我删除了邮递员 headers 上的 Content-Type。

确保在发送请求时没有在 headers 上使用 Content-Type。如果您想知道我没有在 Express 应用程序上设置它(API)。