You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击反转布尔值的链接时参数未更新,status=false无法反转

问题分析与解决方案

问题根源

问题出在字符串转布尔值的逻辑错误:URL的查询参数本质都是字符串类型,当你用Boolean(req.query.status)转换时:

  • 传入status=true时,字符串"true"转布尔结果为true,取反后是false,更新逻辑正常;
  • 传入status=false时,非空字符串"false"转布尔结果依然是true,取反后为false——如果数据库中该任务原本状态就是false,更新后状态不会变化,看起来像是反转失败。

解决方案

需要把字符串形式的"true"/"false"正确转换为对应布尔值,替换掉原来的Boolean()转换逻辑:

const Tasks = require('../models/toDoTasks');
module.exports.toggleTask = (req, res) => {
    (async () => {
        let taskId = req.query.id;
        // 正确将字符串参数转为布尔值
        let currentStatus = req.query.status === 'true';
        await Tasks.updateOne(
            {_id: taskId}, {completed: !currentStatus}
        ).then(() => {
            return res.redirect('/');
        }).catch((err) => {
            console.log(`Error: ${err.message}`);
        });
    })();
}

如果需要兼容大小写(比如传入"TRUE"或"False"),可以使用更严谨的写法:

let currentStatus = req.query.status?.toLowerCase() === 'true';

额外优化建议:可以在更新前添加taskId的有效性校验,避免无效ID触发无意义的数据库操作。

内容的提问来源于stack exchange,提问作者Murugavel.V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:43:15