Вопрос по express, routing, node.js – Экспресс-маршрут обратного URL JS (стиль Django)
Я использую Express JS, и мне нужна функциональность, аналогичная функциональности Django.reverse
функция. Так что, если у меня есть маршрут, например
<code>app.get('/users/:id/:name', function(req, res) { /* some code */ } ) </code>
Я хотел бы использовать функцию, например
<code>reverse('/users/:id/:name', 15, 'John'); </code>
или даже лучше
<code>reverse('/users/:id/:name', { id : 15, name : 'John' }); </code>
который даст мне URL/users/15/John
, Существует ли такая функция? А если нет, то есть ли у вас идеи, как написать такую функцию (учитывая алгоритм маршрутизации Express)?
2
ответа
Я только что создал пакетобратимый-маршрутизатор это решает это наряду с другими проблемами для маршрутизации.
Пример из файла readme:
app.get('/admin/user/:id', 'admin.user.edit', function(req, res, next){
//...
});
//.. and a helper in the view files:
url('admin.user.edit', {id: 2})
Вот ваш код:
function reverse(url, obj) {
return url.replace(/(\/:\w+\??)/g, function (m, c) {
c=c.replace(/[/:?]/g, '');
return obj[c] ? '/' + obj[c] : "";
});
}
reverse('/users/:id/:name', { id: 15, name: 'John' });
reverse('/users/:id?', { id: 15});
reverse('/users/:id?', {});
@Ciantic Это ядро обратной маршрутизации. Создание
name:url
картирование тривиально.
freakish
Я думал о чем-то вроде этого (и на самом деле я реализовал этот простой случай), но, к сожалению, Express использует
?
как особый характер. Это делает вещи немного сложнее, потому что для URL/users/:id?
и то и другое/users
а также/users/1
сопоставьте это.
freakish
Да, я думаю, что это сделает работу. Спасибо!
freakish
Это не обратная маршрутизация, причина, по которой вы хотите сделать обратную маршрутизацию, заключается в том, что структура URL может быть переопределена пользователем. Например. в Django обратная маршрутизация осуществляется путем предоставленияname of the view и параметры, которые в свою очередь дают URL. Под реверсом здесь понимается именно то, что, если кто-то реструктурирует ссылки, ссылки продолжат работать. Ваш пример использует URL-адрес напрямую и представляет собой не что иное, как конструктор URL.