Создание URL-адресов для маршрутов в Express
Я рассматриваю использование Express Framework в следующем проекте node.js. Тем не менее, камнем преткновения для меня является отсутствие генерации URL-адресов для маршрутов, как в большинстве других инфраструктур, основанных не на синатрах, примеры - Django, Flask, Rails и т.д.
Я попробовал найти промежуточное ПО Connect для выполнения своей задачи, и я нашел Barista, Escort, Sherpa и подобных, но, глядя на их страницы GitHub, все выглядят мертвыми и активными. Таким образом, я не хочу идти за тем, что не поддерживается по очевидным причинам.
Моя главная забота здесь в том, что проект может стать действительно большим, и это будет больно обновлять URL-адреса на каждой странице, когда изменяются бизнес-и/или эстетические требования.
Есть ли что-то, что я не видел в документах/тестах? Если нет, то как мне расширить структуру маршрутизации в Express для создания URL-адресов и сделать эту оболочку доступной для моих представлений, а также для функций контроллера?
UPDATE: (22/3/2012) Я нашел эту страницу: https://github.com/clyfe/tweet_express/wiki/TODO, в которой указаны некоторые маршрутизаторы, которые генерируют URL-адреса и наткнулся на эскорт-маршрутизатор, который также может взаимодействовать с выражением.
Ответы
Ответ 1
Вы можете попробовать Locomotive, который построен на Express.
Это намного больше, чем генерация маршрута. Из документов: "Локомотив приносит дополнительную структуру на основе MVC для архивирования больших приложений, одновременно используя мощь промежуточного программного обеспечения Express и Connect".
Локомотивный маршрутизатор генерирует помощники, которые автоматически доступны для контроллеров и представлений.
Ответ 2
Или придерживайтесь выражения и используйте пакет reversable-router.
Пример из 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})
Ответ 3
От @странного ответа:
Для этого нет готового механизма. Однако вы можете имитировать стиль Django следующим образом: определить файл urls.js
который будет содержать массив URL-адресов. Сначала начните с:
myviews.js
exports.Index = function( req, res, next ) {
res.send( "hello world!" );
};
urls.js
var MyViews = require( "mywviews.js" );
module.exports = [
{ name : "index", pattern : "/", view : MyViews.Index }
]
Теперь в app.js (или любом другом главном файле) вам нужно привязать URL к Express. Например, вот так:
app.js
var urls = require( "urls.js" );
for ( var i = 0, l = urls.length; i < l; i++ ) {
var url = urls[ i ];
app.all( url.pattern, url.view );
};
Теперь вы можете определить пользовательский помощник (стиль Express 3.0):
var urls = require( "urls.js" ), l = urls.length;
app.locals.url = function( name ) {
for ( var i = 0; i < l; i++ ) {
var url = urls[ i ];
if ( url.name === name ) {
return url.pattern;
}
};
};
и вы можете легко использовать его в своем шаблоне. Теперь проблема в том, что он не дает вам причудливый механизм создания URL, как в Django (где вы можете передавать дополнительные параметры в url
). С другой стороны, вы можете изменить функцию url
и расширить ее. Я не хочу вдаваться в подробности, но вот пример использования регулярных выражений (вы должны быть в состоянии объединить их с идеями вместе):
Экспресс-маршрут обратного URL JS (стиль Django)
Обратите внимание, что я разместил вопрос, поэтому у меня была такая же проблема некоторое время назад. : D
Ответ 4
Может быть, лучше использовать это
https://www.npmjs.com/package/locomotive