如何切换大小写不一致的格式

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"); }