15

基本的なルートは次のとおりです。

app.get('/', function(req, res){
  res.send('hello world');
});

そのルートに名前を付けて、任意のテンプレートで使用できるようにして、次のように使用できるようにすることは可能ですか:

app.get('/', name="index", function(req, res){
  res.send('hello world');
});

Go to site <a href="{% url index %}">index page</a>.

インスピレーションは Django から来ています :)

4

6 に答える 6

13

そのためのすぐに使えるメカニズムはありません。ただし、次のような Django のスタイルを模倣できます: urls.jsURL の配列を保持するファイルを定義します。まず、次から始めます。

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

テンプレートで簡単に使用できます。ここでの問題は、Django のような手の込んだ URL 作成メカニズムが提供されないことです (追加のパラメーターを に渡すことができますurl)。一方、url関数を変更して拡張することもできます。ここですべての詳細を説明するつもりはありませんが、ここに正規表現の使用方法の例を示します (これらを組み合わせてアイデアをまとめることができるはずです)。

Express JS リバース URL ルート (Django スタイル)

質問を投稿したので、少し前に同じ問題が発生したことに注意してください。:D

于 2012-10-12T08:19:51.207 に答える
0

これがあなたが探しているものだと思います:名前付きルート

コード例:

var express = require('express');
var app = express();

var Router = require('named-routes');
var router = new Router();
router.extendExpress(app);
router.registerAppHelpers(app);

app.get('/admin/user/:id', 'admin.user.edit', function(req, res, next){
    // for POST, PUT, DELETE, etc. replace 'get' with 'post', 'put', 'delete', etc.

    //... implementation

    // the names can also be accessed here:
    var url = app.namedRoutes.build('admin.user.edit', {id: 2}); // /admin/user/2

    // the name of the current route can be found at req.route.name
});

app.listen(3000);

ご覧のとおり、ルートに名前を付けて、admin.user.editビューでアクセスできます

于 2016-08-26T00:04:20.533 に答える