【发布时间】:2018-12-08 13:03:39
【问题描述】:
我需要在 post 请求中发送一个非常大的 json 数据。 在将 bodyperser 的 json 限制设置为 200mb 后,我收到 413 响应。 我在服务器上使用 nodejs,在前端使用 react 和 redux
【问题讨论】:
标签: json redux http-post large-data body-parser
我需要在 post 请求中发送一个非常大的 json 数据。 在将 bodyperser 的 json 限制设置为 200mb 后,我收到 413 响应。 我在服务器上使用 nodejs,在前端使用 react 和 redux
【问题讨论】:
标签: json redux http-post large-data body-parser
app.js 文件是:
'use strict';
let express = require('express');
// let server = require('http').Server(app);
const app = express();
let createError = require('http-errors');
let path = require('path');
let cookieParser = require('cookie-parser');
let logger = require('morgan');
let bodyParser = require('body-parser');
let indexRouter = require('./routes/index');
let apiRouter = require('./routes/api');
require('./mongo_configuration/mongo')();
require('./mongo_models/index');
// app.use(express.static('public'));
app.use(logger('dev'));
app.use(express.json());
// app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'src')));
app.set('view engine', 'html');
app.engine('html', require('ejs').renderFile);
app.set('views', __dirname + '/public');
// app.use(bodyParser.json({limit:'200mb'}));
// app.use(bodyParser.urlencoded({extended: true, limit:'200mb'}));
app.use(bodyParser.urlencoded({
parameterLimit: 100000,
limit: '200mb',
extended: true
}));
app.use('/', indexRouter);
app.use('/api',apiRouter);
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
app.listen(3000, function(){
console.log('App web-server listening on port 3000');
require('./scripts/index');
});
【讨论】:
app.use(bodyParser.urlencoded({ parameterLimit: 100000, limit: '200mb', extended: true })); 放在app.use(express.json()); 的位置后它工作了
在您的代码中,您调用了两次 bodyParser.json() 和 bodyParser.urlencoded(),问题是有限制的调用在没有选项的调用之后,默认为 200kb。因此,当您发布大于 200kb 的内容时,将引发该错误,因为第一个解析器不会转到下一个中间件。
你不应该调用 bodyParser[method] 两次。
您可以更改 bodyParser 属性,如下所示
app.use(bodyParser.json({limit:'200mb'}));
app.use(bodyParser.urlencoded({
parameterLimit: 100000,
limit: '200mb',
extended: true
}));
【讨论】: