2015-06-28 27 views
2
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 

你如何以此爲有效管理越好?

一些框架提供路徑分析器,看起來像

/* 

這和*之後的任何輸入被忽略,因爲同樣的處理。我很好奇它的內在機制。

+0

使用'if-else'或切換'substring'。 –

+0

是的,只需使用'startsWith'類的東西。否則,正則表達式。 –

回答

1

什麼像這樣(見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一切,並在最後elseconsole.log('default')。我已經將我的上述解決方案保留得非常少,所以您可以根據需要進行擴展。

輸出

output

1

你可以只折騰成正則表達式將處理妖異該路線的所有情況下,您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"); 
}