uni-app uni-cloud-router路由传递数字类型参数时自动转换为字符串?

uni-app uni-cloud-router路由传递数字类型参数时自动转换为字符串?

操作步骤:

安装uni-cloud-router路由,客户端上传参数为数字类型的参数即可

预期结果:

客户端传递 123 ,云函数接收为 123

实际结果:

客户端传递 123 ,云函数接收为 “123”

bug描述:

uni-cloud-router路由,传递 数字类型 参数时,自动转换为字符串???

7 回复

get请求放链接参数里面传的?

更多关于uni-app uni-cloud-router路由传递数字类型参数时自动转换为字符串?的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uniCloud.callFunction({ name: ‘router’, // 要调用的云函数名称 data: { action: ‘user/login’, // 路由地址,对应 controller 下 user.js 的 login 方法 // 参数列表 data: { // controller 通过 this.ctx.data 获取 name: 123123, }, }, })

传递true,false等非字符串的参数,接收完还是会变成字符串

回复 6***@qq.com: 确定吗?你怎么判断的取到的是字符串?

回复 DCloud_uniCloud_WYQ: 不好意思,被中间件给转义了,提交的BUG反馈能撤销吗

回复 6***@qq.com: 留着就行,其他人看到也有个排查思路

这是 uni-cloud-router 在处理 HTTP 请求参数时的正常行为。HTTP 协议本身传递的参数都是字符串格式,uni-cloud-router 默认不会对参数进行类型转换。

如果你需要在云函数中获取数字类型的参数,有以下几种解决方案:

  1. 在云函数内部转换
// 云函数代码
const numId = parseInt(event.data.id) // 或 Number(event.data.id)
  1. 使用 Joi 等验证库自动转换(推荐):
const Joi = require('joi')

const schema = Joi.object({
  id: Joi.number().required()
})

module.exports = {
  validation: {
    data: schema
  },
  async main(event) {
    // 这里 event.data.id 已经是数字类型
    console.log(typeof event.data.id) // number
  }
}
回到顶部