MERN栈中BOOLEAN值因缺少引号无法更新问题求解
问题根因
你后端更新逻辑里的布尔字段判断存在逻辑漏洞:
当前代码写的是 if (attention) logFields.attention = attention;,当你传布尔值false时,if(false) 条件不成立,所以attention字段根本不会被加入到待更新的logFields对象里,自然不会执行更新。
你之前在Postman里传字符串"false"能成功,是因为非空字符串的if判断结果为true,所以字段被加入到更新对象里,Mongoose的Boolean类型字段会自动把字符串"false"/"true"转为对应的布尔值存储,属于歪打正着的效果。
修复方案(推荐优先改后端逻辑,符合JSON规范)
把后端路由里的attention字段判断逻辑改成显式判断字段是否存在,而不是判断值是否为真:
// 把原来的 if (attention) logFields.attention = attention; 替换成下面的代码 if (attention !== undefined) logFields.attention = attention;
其他字段如果也需要支持清空(比如message允许为空字符串),也可以用同样的判断逻辑替换。
备选方案(前端转字符串提交,不推荐但可以兼容你之前的测试逻辑)
如果不想改后端代码,可以在前端提交时把布尔值转成字符串:
const updLog = { id: current._id, message, tech, attention: String(attention), // 布尔转字符串 date: new Date(), };
内容的提问来源于stack exchange,提问作者Arrow
相关产品推荐
相关产品推荐

