问题
I'm creating rest endpoints in my nodejs application as follows:
In my server.js I have the following code:
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'));
I also tried the code below instead of using the express.json and expres.urlencoded as suggested on the potential duplicate question.
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'));
In my APIRoutes file I have the following code:
/* --- 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) {
...
});
I tried different combinations and orders for setting the limit higher. But currently every time I send a payload of 2kb, I get an 413 "(Payload Too Large)" error back.
Any help what the correct location is for setting the limit?
回答1:
I found the solution for my problem in one of the unaccepted answers of the suggested duplicate of TKJohn. I had to add the parameter limit so that my code became:
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit: 50000 }));
After the addition it worked!
I was also ablo to remove the code from APIRoutes.js
router.use(bodyParser.json({ limit: '50mb' }));
router.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
回答2:
Tried looking online for past couple of hours and found no solution to 413 Payload
Turns out in urlencoded.js within the body-parser module there are additional options which take care of limits.
Options like parameterLimit and arrayLimit are items to amend if your parameter or array size exceeds the limit that is granted by default (which is 100 for array size).
回答3:
You can use this straightaway in express
if you are using the latest version of 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}));
Please note that this will only work with express
versions bundled with bodyParser
(bodyParser
was added back to express
in release 4.16.0)
来源:https://stackoverflow.com/questions/52016659/nodejs-router-payload-too-large