问题描述
理想的结果是,该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
,第一个是更好的方法