2015-06-28 1 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' или переключитесь на' подстроку'. –

+0

Да, просто используйте «startWith». В противном случае регулярное выражение. –

ответ

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 

Вы также можете использовать регулярное выражение. Имейте в виду, что если некоторые условия ввода могут совпадать друг с другом, вы должны указать return в конце каждого if или просто использовать else if. Полностью зависит от маршрутов, которые вы ищете.

Для случая default вы можете связать все с if... else if, а в финале else положить console.log('default'). Я оставил мое решение очень минимальным, чтобы вы могли продлить его по своему усмотрению.

Выход

output

1

Вы можете просто бросить регулярное выражение в ваш переключатель заявление, которое будет обрабатывать все случаи ветвящиеся от этого маршрута.

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