【问题标题】:expressjs with bodyParser giving array of numbers as array of string带有bodyParser的expressjs将数字数组作为字符串数组
【发布时间】:2019-07-31 18:52:42
【问题描述】:

不知何故,我意识到当我将数字数组传递给后端 expressjs 时,我会得到字符串数组而不是数字。

这是发送数据的ajax代码

$.ajax({
    method: 'post',
    url: this.url.ajax.send,
    data,
})

这是我在前端传递给后端的值

const data = {
  "type": [
    1,
    2
  ],
  "to": [
    0
  ],
  "message": "testing message here"
}

这是我在后端req.body得到的

{ type: [ '1', '2' ],
  to: [ '0' ],
  message: 'testing message here' } 

我确实有 bodyParser 这样的设置

app.use(bodyParser.urlencoded({
    extended: true,
    parameterLimit: 2000000,  // too many parameter if not set
    limit: 1024 * 1024 * 10  // entity too large if not set
}));
app.use(bodyParser.json({
    extended: true,
    parameterLimit: 2000000,  // too many parameter if not set
    limit: 1024 * 1024 * 10  // entity too large if not set
}));

这是正常现象还是有什么办法可以解决?

编辑:这是我从 chrome 检查工具的网络选项卡中看到的图像

【问题讨论】:

  • 你能说明你是如何发送数据的吗?
  • 尝试使用 Postman(或 curl)向您的后端发出类似的请求,如果仍然发生,请告诉我。
  • @MohammedAmirAnsari 编辑,一个 jquery ajax 调用
  • @UtkarshPramodGupta 我的错,我用邮递员做了测试,用邮递员测试后端读取为数字数组很好。但是我在上面为const data = 发布的内容是我console.logajax 之前调用的值
  • @Dora 不要使用console.log,使用浏览器的开发工具检查网络请求实际发送到后端的内容。

标签: javascript arrays string express body-parser


【解决方案1】:

使用 parseInt 将字符串解析为 int,例如:

let requestBody = {
  type: [ '1', '2' ],
  to: [ '0' ],
  message: 'testing message here'
}

requestBody.type = requestBody.type.map((arr) => {
  arr = parseInt(arr)
  return arr
})

requestBody.to = requestBody.to.map((arr) => {
  arr = parseInt(arr)
  return arr
})

console.log(requestBody)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多