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: '入库失败'
      });
    }
  });
});

报错如下:
error
后来查了一下这个错误,原来是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中提交请求,
入库成功

参考资料

©️2020 CSDN 皮肤主题: 护眼 设计师: 闪电赇 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值