Mongoose POST接口validTill字段Cast to Number失败NaN问题排查求助
问题根因
- 字段不匹配:你请求参数里携带的是
validTill时间戳,但业务代码全程读取的是receivedData.validDays字段,你没有传递该字段,所以numberOfDaysToAdd取值为undefined - 计算逻辑错误:执行
someDate.getDate() + undefined得到的结果是NaN,传入setDate后日期对象失效,调用getTime()返回NaN,而你的Ban模型中validTill定义为Number类型,写入NaN时触发类型转换报错 - 你传入的
validTill参数全程没有被代码使用,所以直接传日期类型也无法解决问题
修复方案
根据你的业务需求二选一即可:
方案1:调整请求参数(保留代码当前逻辑)
如果业务逻辑是前端传递封禁天数,就把请求参数里的validTill替换为数字类型的validDays,示例:
{"plrID": "1", "key": "abc", "validDays": 7, "reason": "test"}
方案2:修改业务代码(使用前端传递的时间戳)
如果业务逻辑是前端直接传递到期时间戳,删掉代码中所有手动计算someDate的逻辑,直接使用你传入的validTill,注意转换为数字类型:
// 替换原有计算逻辑 const validTill = Number(receivedData.validTill) // 后续数据库操作直接使用validTill变量即可
优化建议
新增参数校验逻辑,在接口入口处判断必填参数是否存在、格式是否合法,不满足要求直接返回参数错误提示,便于快速定位问题。
内容的提问来源于stack exchange,提问作者BenBenBen
相关产品推荐
相关产品推荐

