2012-08-04 17 views
33

ドキュメントが読み込ま:動詞がapp.postなどのHTTP動詞の、()である場合expressjs app.VERB呼び出しのnext()とnext( 'route')の違いは何ですか?

app.VERB()メソッドは、Express、 でルーティング機能を提供します。複数の コールバックが与えられ、すべてが等しく扱われ、 ミドルウェアのように振る舞いますが、これらのコールバックが残りのルートコールバックをバイパスするために次に呼び出される例外はあります( 'route')。この メカニズムを使用してルート上で事前条件を実行した後、 ルートを一致させる理由がない場合は、 コントロールを後続のルートに渡します。

「残りのルートコールバックをバイパスする」とはどういう意味ですか?私はnext()が次の一致するルートに制御を渡すことを知っています。しかし...どの機能がnext('route')で制御権を得ますか?

答えて

51

5分後に私自身の質問に答えると嫌いでした。 next('route')はルートミドルウェアを使用している場合です。あなたが持っているのであれば:

app.get('/forum/:fid', middleware1, middleware2, function(){ 
    // ... 
}) 

関数middleware1は、()完全に次に一致するルートに制御を渡すmiddleware2、またはnext('route')に制御を渡すnext()を呼び出すための機会を持っています。

+5

APIが奇妙です。彼らが 'next()'や 'next_route()'などを使用した方が意味があります。あるいは 'next_middleware()'と 'next_route()'です。両方に同じメソッドを使用し、固定文字列の引数を取って基本的には非常に異なるものにする - これはかなり予期せぬものです。 – iconoclast

+3

ありがとう、それは私のためにそれを明確にします。私は、あなたが 'next( 'users /:userId')'などのようなものをドキュメント内のものから呼び出すことができると考えていました。あなたのコメントから、定数文字列 '' route'' ** always **を渡すことができるように思えます。 – willko747

+1

それを憎んではいけない、あなたの知恵の広がりは非常に貴重です! – R01010010

関連する問題