Генерация URL для маршрутов в Express - PullRequest
17 голосов
/ 06 января 2012

Я планирую использовать Express Framework в моем следующем проекте node.js. Однако камнем преткновения для меня является отсутствие генерации URL для маршрутов, как в большинстве других основанных не на Синатре фреймворков, примеров - Django, Flask, Rails и т. Д.

Я попытался найти какое-то промежуточное программное обеспечение Connect для выполнения своей задачи, и я обнаружил, что Бариста, Эскорт, Шерпа и им подобные, но, глядя на их страницы GitHub, кажутся мертвыми и неактивными. Поэтому я не хочу идти на что-то, что больше не поддерживается по понятным причинам.

Моя главная проблема здесь заключается в том, что проект может стать действительно большим, и будет сложно обновлять URL-адреса на каждой странице всякий раз, когда меняются деловые и / или эстетические требования.

Есть ли что-то, что я не смог увидеть в документах / тестах? Если нет, то как мне расширить инфраструктуру маршрутизации в Express для генерации URL и сделать эту обертку доступной в моих представлениях, а также в функциях контроллера?

ОБНОВЛЕНИЕ: (22/3/2012) Я нашел эту страницу: https://github.com/clyfe/tweet_express/wiki/TODO, в которой указаны некоторые маршрутизаторы, которые выполняют генерацию URL, и наткнулся на маршрутизатор сопровождения, который также может взаимодействовать с Express.

Ответы [ 3 ]

14 голосов
/ 15 октября 2012

Или придерживайтесь экспресса и используйте пакет 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})
10 голосов
/ 13 февраля 2012

Вы можете попробовать Локомотив , который построен на Express.

Это намного больше, чем генерация маршрута Из документов: «Locomotive предоставляет дополнительную структуру на основе MVC для разработки более крупных приложений, одновременно используя возможности промежуточного программного обеспечения Express и Connect».

Маршрутизатор локомотива генерирует помощников , которые автоматически доступны для контроллеров и представлений.

0 голосов
/ 02 января 2019

Из ответа @ freakish :

Для этого не существует готового механизма.Однако вы можете имитировать стиль 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)style)

Обратите внимание, что я разместил вопрос, поэтому у меня была такая же проблема некоторое время назад.: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...