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
版本
(bodyParser
在 4.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)。
我正在我的 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
版本
(bodyParser
在 4.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)。