2016-10-21 2 views
1

Я работаю с внешним приложением, сообщения запроса HTTP с этим телом на одном URL http://example.com/eventsКак перенаправить строку в функцию, основанную на регулярном выражении?

{ userToken: '***************', 
token: '**********************', 
name: 'app.install', 
userId: 'u:******' } 

Основываясь на «имя», у меня есть различные функции для обработки входного сигнала. Как перенаправить запрос на правильную функцию?

В выражениях Express и Django regex используется для сопоставления URL-адреса с функцией обработки.

urlpatterns = [ 
    url(r'^articles/2003/$', views.special_case_2003), 
    url(r'^articles/([0-9]{4})/$', views.year_archive), 
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), 
] 

В моем случае URL остается неизменным, но имя часть ответа JSON определяет, что должно быть сделано.

Как мне присвоить функцию «имя» функции?

Мой нынешний подход заключается в использовании длинного корпуса коммутатора. Я видел, что некоторые люди просто используют eval(), но это плохой подход. Есть ли способ, который работает как система маршрутизации Django?

ответ

0
  1. В гамме номеров есть тоны парсеров. Получите тот, который вы предпочитаете.
  2. Создать карту пар маршрутов-обработчиков.
  3. Итерация по карте по запросу in for loop.

Пример с route-parser пакета НПМ:

const Router = require('route-parser'); 
const routes = new Map(); 

routes.set(new Router('/users/:id'), (params) => { 
    return `id: ${params.id}`; 
}); 

function handleRoute(url, ...args) { 
    for (let route of routes.keys()) {      
     let match = route.match(url); 
     if (match) { 
      return routes.get(route)(match, ...args); 
     } 
    } 
} 

handleRoute('/users/1'); // -> 'id: 1' 
+0

Nice, Он работал хорошо! –

+0

Есть ли способ вызвать эти функции с аргументами, которые не указаны в URL-адресе? –

+0

@boysimpledimple Обновить пример кода, чтобы обеспечить любое количество аргументов в обработчике. –

Смежные вопросы