uni-app uni-cloud-router路由传递数字类型参数时自动转换为字符串?
uni-app uni-cloud-router路由传递数字类型参数时自动转换为字符串?
操作步骤:
安装uni-cloud-router路由,客户端上传参数为数字类型的参数即可
预期结果:
客户端传递 123 ,云函数接收为 123
实际结果:
客户端传递 123 ,云函数接收为 “123”
bug描述:
uni-cloud-router路由,传递 数字类型 参数时,自动转换为字符串???
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 默认不会对参数进行类型转换。
如果你需要在云函数中获取数字类型的参数,有以下几种解决方案:
- 在云函数内部转换:
// 云函数代码
const numId = parseInt(event.data.id) // 或 Number(event.data.id)
- 使用 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
}
}

