2017-09-09 11 views
0

私は、ミドルウェアが何を参照しているかを把握しようとしています。最初はフレームワークで使われていた機能だと思っていました。現在、私は非同期関数の中間にある関数を単に参照するだけの意味があります。マングースのミドルウェアも表現のミドルウェアを参照していますか?

私はnext()がミドルウェアから次のミドルウェアに移行するのが一般的だと知っています。 expressとmongooseの両方に似た名前のnext()呼び出しがあります。私はマングースや表現が彼らの文書にお互いを参照するのを見ていないので心配です。このため、ミドルウェアのコンテキストは単なるものであると私は信じています。

http://mongoosejs.com/docs/middleware.html
http://expressjs.com/en/resources/middleware.html

全てのミドルウェアが連結一緒に/並んでいる、またはそれが分離されているマングースとエクスプレス結合?

一緒に/連結された
- mongooseの呼び出しnext()もミドルウェア機能を表現します。

セパレート
- マングースはちょうどそれが(次のミドルウェア)だけでプリ/ポストフックのための移動のしている
- また、単にそれは、次のミドルウェア()それは、ミドルウェア機能

答えて

0

短い答えサポートだ方だけ移動しますた表現:彼らはしているが、分離する。

長い答え:慣例により、ほとんどのミドルウェア・スタックはスタックを下に進行し、順番に各ミドルウェア機能を呼び出すために呼び出すことnext機能のいくつかの種類を実装しています。

これは範囲の問題です。 ExpressとMongooseはどちらも独自のミドルウェアスタックを持っていますので、nextの機能は呼び出される場所によって異なります。一般的な経験則として、nextパラメータを受け入れるコールバックに使用される匿名関数を含むすべての関数は、独自のスコープを持ちます。

は異なり、以下の本当に簡単な例では、スコープが、それ以外は同じパラメータ名考えてみましょう:

function doSomething(arg) { 
    console.log(arg) 

    function doSomethingElse(arg) { 
     console.log(arg); 
    } 

    doSomethingElse('different'); 
} 

doSomething('original'); 
// Outputs 
// > 'original' 
// > 'different 

doSomethingdoSomethingElse両方がargというパラメータを持っているにもかかわらず、値がdoSomethingElseによってコンソールにログインした値であります実際にその関数に渡されました。値はargで、呼び出された関数にスコープされていて、それを囲むスコープではありません。

これは、Expressミドルウェアに適用されているMongooseミドルウェア(またはその逆)に当てはまります。これは、同じような従来型のパラメータ名を共有しているだけです。学習実験として

、あなたは一瞬の規約から逸脱すべきである(ただし、永遠に!;規則は理由のために存在する)あなたのExpressとあなたのマングース nextパラメータ単一file-- expressNextmongooseNextで何か他のものに名前を付けるために、おそらく、あなたの心の中でそれらを区別するのを助けるために。

+1

申し訳ありませんすぐに返信できませんでしたが、この回答に感謝します。本当に役に立ちます。 :) – Jonathan002

関連する問題