在 redux 的 post 请求中发送大型 json 数据
Posted
技术标签:
【中文标题】在 redux 的 post 请求中发送大型 json 数据【英文标题】:send large json data in post request in redux 【发布时间】:2018-12-08 13:03:39 【问题描述】:我需要在 post 请求中发送一个非常大的 json 数据。 在将 bodyperser 的 json 限制设置为 200mb 后,我收到 413 响应。 我在服务器上使用 nodejs,在前端使用 react 和 redux
【问题讨论】:
【参考方案1】: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(myParser.json(limit: '200mb')); 将此代码app.use(bodyParser.urlencoded( parameterLimit: 100000, limit: '200mb', extended: true ));
放在app.use(express.json());
的位置后它工作了【参考方案2】:
在您的代码中,您调用了两次 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
));
【讨论】:
嘿帕布,感谢您的回复。正如你所说,我已经调用了两次 bodyParser 方法是正确的。我用过 app.use(bodyParser.json(limit:'200mb')); app.use(bodyParser.urlencoded(extended: true, limit:'200mb'));这里的代码 app 是 expres 对象。但我在评论第二行后尝试过。它没有工作 您是在本地环境还是生产环境中遇到此错误? 在本地环境中 我的 app.js 看起来像这样:以上是关于在 redux 的 post 请求中发送大型 json 数据的主要内容,如果未能解决你的问题,请参考以下文章
React Redux Axios:POST 请求未收到来自 redux 状态的凭据
Fetch Post 在 redux-saga 中不起作用?
Vue JS Axios Post 请求向 PHP 发送 Null
Json-server 使用 React js 和 Redux 响应错误 404 not found Post Method