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

问题描述

理想的结果是,该switch语句将基于切换是“ true”还是“ false”来选择一条路由。但是,无论值是多少,现在都将使用认路由。

    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},"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向路由器/控制器发送的字符串不是bool。

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

,

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

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

您可以选择其中之一

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

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

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