通过 axios 传递一个布尔值来表达路线,但不再像布尔值一样

passing a boolean through axios to express route, but no longer acting like a boolean

期望的结果是此 switch 语句将根据切换是“真”还是“假”来选择路由。但是,现在无论值是什么,它都会转到默认路由。

    router.post('/team_activate/:team_oid/:toggle', function(req, res) {
        
        console.log("req.params.toggle: "+req.params.toggle)

        switch (req.params.toggle){
            case true:
                console.log("Live")
                Team.findOneAndUpdate({ _id: req.params.team_oid}, {"$set": { "active": req.params.toggle, "status": "Live" }}).exec(function(err, doc){
                    if(err){
                        throw(err);
                    } else {
                        res.send(doc)
                    }
                })
            break;

            default:
                console.log("Paused")
                Team.findOneAndUpdate({ _id: req.params.team_oid}, {"$set": { "active": req.params.toggle, "status": "Paused" }}).exec(function(err, doc){
                    if(err){
                        throw(err);
                    } else {
                        res.send(doc)
                    }
                })
            break;
        }
   })

console.logs读出来是这样的:

req.params.toggle: true
Paused
req.params.toggle: false
Paused
req.params.toggle: true
Paused
req.params.toggle: false
Paused
req.params.toggle: true
Paused
req.params.toggle: false
Paused
req.params.toggle: true
Paused
req.params.toggle: false
Paused
req.params.toggle: true
Paused

在此之前我做了一个简单的“if(req.params.toggle)”语句,但也没有用。谢谢你的想法。

你实际上需要将它解析为布尔值,因为 express 发送字符串到 router/controller 而不是布尔值。

你可以使用 toggle === 'true' ? true : false 解析它

任何请求响应都在转换中被字符串化,因此发送和消费应用程序需要分别序列化和反序列化JSON个对象,

在你的情况下,你直接期望它是布尔值,但它是一个字符串,你需要在使用它之前解析它。

你可以选择

let toggle = new Boolean(req.params.toggle);

let toggle = req.params.toggle === 'true' ? true : false;

并在切换条件中使用toggle,第一个是更好的方法