nodejs错误:PayloadTooLargeError: request entity too large
最近在使用Nodejs写POST接口的时候,涉及到客户端在请求体中上传base64编码图片的问题,例如我使用的POST请求,问题描述如下:
接口相关描述
插入车流量记录 接口描述:根据指定条件插入站点记录数据 服务地址:http://127.0.0.1:12082/api/insertCarFlowRecord 请求方式:POST请求 数据格式:JSON 参数格式:
参数名称 |
参数类型 |
参数说明 |
参数数值 |
---|---|---|---|
RecordID |
string |
数据唯一编号 |
|
SmokeBlackID |
string |
黑烟车唯一编码 |
|
SiteID |
int |
站点编号 |
|
Lane |
int |
车道号 |
|
PassTime |
string |
通过时间 |
|
RegMark |
string |
车牌号 |
|
RegColor |
string |
车牌颜色 |
|
RegCondition |
int |
车牌识别的可信度 |
|
EnvFlagLimite |
int |
环保标志限行号 |
0或者1 |
TailNumLimite |
int |
尾气数限制 |
|
IsSmokeBlack |
int |
是否黑烟车 |
0 是 1不是 |
Speed |
string |
速度 |
|
Acc |
string |
加速度 |
|
CarLen |
string |
车长 |
|
Pic |
string |
图片 |
Base64编码 |
返回格式:
参数名称 |
参数类型 |
参数说明 |
参数数值 |
---|---|---|---|
rc |
boolean |
调用是否成功 |
true或者false |
str |
string |
返回入库成功与否等提示信息 |
string |
使用Postman请求如下的JSON数据:
{
"RecordID":"1125",
"SmokeBlackID":"1125",
"SiteID": 4,
"Lane": 1,
"PassTime": "2020-01-01T00:06:00.22",
"RegMark": "京N896P9",
"RegColor": "蓝",
"RegCondition": 89,
"EnvFlagLimite": 0,
"TailNumLimite": 0,
"IsSmokeBlack": "0",
"Speed": "10",
"Acc": "2",
"CarLen": "4",
"Pic": "/9j/4AAQSkZJRgABAQEAAAAAAAD/2wBDAAQDAwMDAgQDAwMEBAQFBgoGBgUFBgwICQcKDgwPDg4MDQ0PERYTDxAVEQ0NExoTFRcYGRkZDxIbHRsYHRYYGRj/2wBDAQQEBAYFBgsGBgsYEA0QGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBj/2wBDAgQEBAYFBgsGBgsYEA0QGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBj/wAARCAQ4B4ADASIAAhEBAxEC/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtRKpKqzLhikZyH9W5r1j46f8lV0r/sFx/+hNXj8nRfq3869eLvFNnM1qf/2Q******************=="
}
由于Pic字段的base64编码数据太大,此处我省略了许多。 相应的接口代码如下:
/**
* 插入车流量信息表CarFlow
*/
router.post('/insertCarFlowRecord', function(req, res) {
let RecordID = req.body.RecordID; // 数据唯一编号
let SmokeBlackID = req.body.SmokeBlackID; // 黑烟车唯一编号
let SiteID = req.body.SiteID; // 站点编号
let Lane = req.body.Lane; // 车道号
let PassTime = req.body.PassTime; // 通过时间
let RegMark = req.body.RegMark; // 车牌号
let RegColor = req.body.RegColor; // 车牌颜色
let RegCondition = req.body.RegCondition; // 车牌识别的可信度
let EnvFlagLimite = req.body.EnvFlagLimite; // 环保标志限行号
let TailNumLimite = req.body.TailNumLimite; // 尾气数限制
let IsSmokeBlack = req.body.IsSmokeBlack; // 是否黑烟车
let Speed = req.body.Speed; // 速度
let Acc = req.body.Acc; // 加速度
let CarLen = req.body.CarLen; // 车长
let Pic = req.body.Pic; // 图片
if (RecordID == undefined || SmokeBlackID == undefined || SiteID == undefined || Lane == undefined ||
PassTime == undefined || RegMark == undefined || RegColor == undefined ||
RegCondition == undefined || EnvFlagLimite == undefined || TailNumLimite == undefined ||
IsSmokeBlack == undefined || Speed == undefined || Acc == undefined || CarLen == undefined || Pic == undefined ) {
return res.send({
rc: false,
str: '参数不全或不对,请将信息填充完整!'
});
}
if (IsSmokeBlack != 1 && IsSmokeBlack != 0) {
return res.send({
rc: false,
str: 'IsPass取值为0或1,请重新填写!'
});
}
// 入库前,先判断该RecordID在数据库中是否已经存在
serviceObj.DBClient.isExistRecordInCarFlowTable(RecordID, function(err, result) {
if (result === true) {
return res.send({
rc: false,
str: `遥测记录ID '${RecordID}' 已经存在`
})
}
});
// 如果RecordID不存在,则入库
serviceObj.DBClient.insertCarFlowRecord(req.body, function(err,result) {
if (result === true) {
return res.send({
rc: true,
str: '入库成功'
});
} else {
return res.send({
rc:false,
str: '入库失败'
});
}
});
});
报错如下:
后来查了一下这个错误,原来是nodejs 服务器,在传输内容或者上传文件时,系统默认大小为100kb,这时,我们需要修改系统限制。 HTTP请求时,POST PUT方法理论上,没有参数大小限制。但实际中在服务器端,会限制HTTP请求的大小。所以会出现带大参数的请求服务器无法响应的情况。 特别是在使用富文本编辑器图片采用Base64编码的情况下,默认的1MB的请求参数大小很容易超过,因此,需要修改HTTP请求的大小限制。 在Node.JS的app.js或者server.js中,在bodyparser中修改这个限制即可:
app.use(bodyParser.json({limit:'100mb'}));
app.use(bodyParser.urlencoded({ limit:'100mb', extended: true }));
修改代码后重启服务程序,在Postman中提交请求,
参考资料
- nodejs错误 : request entity too large
- Node.JS HTTP请求上传参数最大限制修改
- 解决node接收图片base64格式问题:PayloadTooLargeError: request entity too large
- R语言之系统聚类(层次)分析之图谱形式完整版
- Java操作数据库Spring(1)
- python基础知识——内置数据结构(集合)
- 关于db link权限分配的苦旅(二)(r7笔记第45天)
- 简单易学的机器学习算法——在线顺序极限学习机OS-ELM
- Java操作数据库Spring(2)
- 解决SSH连接linux中文显示乱码问题
- 设计模式——类图以及类与类之间的关系
- sysdba登录报错insufficient privileges的原因分析(r7笔记第64天)
- JDBC基础入门(1)
- LeetCode——Add Two Numbers
- python 中numpy基本方法总结可以类推tensorflow
- python基础知识——函数
- tensorflow之tf.placeholder 与 tf.Variable区别对比
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在 Ubuntu 系统上配置 Nginx Git 服务器
- 设计模式之规格模式
- Android-Jetpack笔记-Navigation之Fragment使用
- Android-Jetpack笔记-Navigation之Fragment支持复用
- Android-Jetpack笔记-Room
- 代理模式看这一篇就够了~
- Spark MLlib中KMeans聚类算法的解析和应用
- 通过 PHP 代码发送 HTTP 响应与文件下载
- 玩转 PhpStorm 系列(八):Vim 篇
- Android-Jetpack笔记-Paging结合数据库
- 分享 OWIN 静态文件处理中间件
- Android-Jetpack笔记-Paging结合网络数据
- 在 VS 2015 中使用 Gulp 编译 TypeScript
- Android-Jetpack笔记-WorkManager
- Android | Tangram动态页面之路(一)需求背景