[英]how to switch-case with inconsistent variable format
switch (req.path)
{
case "/api/posts":
console.log("posts");
break;
case "/api/posts/tags/*": // the part * is always changing depending on user input
console.log("tags");
break;
case "/api/best":
console.log("best");
break;
default:
console.log("default");
}
req.path 给出了我的路径
例如
/api/post/tags/asd,dsfd
/api/post/tags/1
/api/post/tags/12,123
你如何尽可能有效地管理这个?
一些框架提供了看起来像的路径解析器
/*
this 和 * 之后的任何输入都将被忽略并视为相同。 我很好奇它的内部机制。
这样的事情怎么样(见jsfiddle ):
function route(req) {
if(req.path === '/api/posts') {
console.log('posts');
}
if(req.path.indexOf('/api/posts/tags') > -1) {
console.log('tags');
}
// etc.
}
route({path: '/api/posts'}); // => posts
route({path: '/api/posts/tags/hi'}); // => tags
route({path: '/api/posts/tags/cool'}); // => tags
您也可以使用正则表达式。 请记住,如果某些输入条件可能彼此匹配,则您需要在每个if
语句的末尾return
,或者简单地使用else if
。 完全取决于您寻找的路线。
对于default
情况,您可以使用if... else if
将所有内容串在一起,并在最后的else
放入console.log('default')
。 我将上述解决方案保留得非常少,因此您可以根据需要扩展它。
您可以将正则表达式放入您的 switch 语句中,该语句将处理从该路由分支的所有情况。
switch (req.path)
{
case "/api/posts":
console.log("posts");
break;
case req.path.match(/(\/api\/posts\/tags\/)/)[1]:
console.log("tags");
break;
case "/api/best":
console.log("best");
break;
default:
console.log("default");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.