如何切换大小写不一致的格式
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给出了我的path
例如
/api/post/tags/asd,dsfd /api/post/tags/1 /api/post/tags/12,123
你如何尽可能有效地pipe理?
一些框架提供了看起来像的path分析器
/*
这个和*之后的任何input都被忽略,并被视为相同。 我好奇它的内在机制。
这样的事情呢(看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
你也可以使用正则expression式。 请记住,如果某些input条件可能相互匹配,则您将希望在每个if
语句的结尾处return
,或者简单地使用else if
。 完全取决于你寻找的路线。
对于default
情况,你可以把所有的东西都和if... else if
一起串起来,最后把console.log('default')
。 我已经把我的上面的解决scheme保留得很less,所以你可以根据你的需要来扩展它。
产量
你可以把一个正则expression式转换成你的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"); }