3

node.js と Express を使用してアプリを設計していますが、特定のルーティング ロジックを app.js ファイルから移動できるかどうか疑問に思っていました。たとえば、私の app.js には現在以下が含まれています。

app.get('/groups',routes.groups);
app.get('/',routes.index);

このロジックを app.js ファイルから移動し、次のようなものだけにする方法はありますか?

app.get('/:url',routes.get);
app.post('/:url",routes.post);

すべてのGETリクエストが によって処理されroutes.get、すべてのPOSTリクエストがroutes.post?で処理されるようにします。

4

2 に答える 2

5

ルート定義として正規表現を渡すことができます。

app.get(/.+/, someFunction);

これなら何にでも合います。ただし、ルート定義をメインの app.js ファイルの外に移動するだけの場合は、次のようにする方がはるかに明確です。

app.js

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

...

require('routes').addRoutes(app);

ルート.js

exports.addRoutes = function(app) {
    app.get('/groups', function(req, res) {
        ...
    });
};

このようにして、独自のルーティングを再ロールするのではなく、Express の組み込みルーティングを引き続き使用します (例で行う必要があります)。

于 2012-07-15T17:10:38.210 に答える
0

完全な開示: 私は、以下のノード モジュールの開発者です。

あなたが求めているようなことをするノードモジュールがあります(そして、最終的にはもっと多くのことをするでしょう)。エクスプレスの設定よりも規約に基づいた自動ルーティングを提供します。モジュール名は Honey-Express ですが、現在はアルファ版開発中であり、NPM ではまだ利用できません (ただし、https://github.com/jaylach/honey-expressのソースから入手できます。

それがどのように機能するかの簡単な例: (この coffeescript に注意してください)

# Inside your testController.coffee file. Should live inside /app/controllers
honey = require 'honey-express'

TestController = new honey.Controller
    index: ->
        # @view() is a helper method to automatically render the view for the action you're executing. 
        # As long as a view (with an extension that matches your setup view engine) lives at /app/views/controller/actionName (without method, so index and not getIndex), it will be rendered.
        @view()
    postTest: (data) ->
        # Do something with data

app.js ファイル内で、いくつかの簡単な構成をセットアップする必要があります。

# in your app.configure callback...
honey.config 'app root', __dirname + '/app'
app.use honey.router()

リクエストが来るたびに、蜂蜜は指定されたルートを持つコントローラーを自動的に探し、次に一致するアクションを探します..例-

  • /test は、testController の index/getIndex() メソッドに自動的にルーティングします
  • / 存在する場合、homeController (デフォルトのコントローラーはホーム) の index/getIndex() メソッドに自動的にルーティングされます。
  • /test/test は、http メソッドが POST の場合、testController の postTest() メソッドに自動的にルーティングされます。

前述したように、モジュールは現在アルファ版の状態ですが、自動ルーティングは素晴らしく機能し、現在 2 つの異なるプロジェクトでテストされています :) しかし、アルファ版の開発段階にあるため、ドキュメントがありません。このルートに進むことにした場合は、私が github にアップしたサンプルを参照するか、コードを確認するか、私に連絡してください。喜んでお手伝いします :)

編集:ハニーエクスプレスはエクスプレスの2.xには存在しない機能を使用するため、最新(ベータ)バージョンのエクスプレスが必要であることにも注意してください。

于 2012-07-15T17:14:48.980 に答える