NodeJS路由器有效负载过大

时间:2018-08-25 11:03:21

标签: node.js rest express payload

我将在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错误(“有效负载过大”)。

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

5 个答案:

答案 0 :(得分:3)

我在建议的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 }));

添加后它起作用了!

我也是ablo从APIRoutes.js删除代码

router.use(bodyParser.json({ limit: '50mb' }));
router.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));

答案 1 :(得分:2)

这对我有用

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

答案 2 :(得分:1)

尝试在线查看了过去几个小时,但没有找到解决413有效载荷的方法

在body-parser模块中的 urlencoded.js 中进行了分析,还有其他一些限制选项。

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

parameterLimit arrayLimit 之类的选项将被修改。

答案 3 :(得分:0)

如果您使用的是最新版本的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}));

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

答案 4 :(得分:0)

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

你在上传文件吗?

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

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

我的问题是我在标题上设置了:Content-Type: application/json 并且我 [正在] 使用 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());
...

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

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