2011-08-01 10 views
4

Nodejsの "次の"関数(そして一般的にはJavascript?)に移動したい場合、次の関数にパラメータを渡すことができないようです。ここでNodejsとConnect "next"の機能

は、私が何を意味するかです:今

app.get('/webpage', SomeFunction, NextFunction); 

function SomeFunction (req, res, next) { 
    // Do things 
    next(); 
} 

function NextFunction (req, res) { 
    // Do other things 
} 

SomeFunctionに私は動作するようには思えないnext(req, res);言っていた場合。それは方法に決して行きません。明らかに私は直接パラメータを渡すことはできません...しかし、私の質問はなぜですか?次の関数は、使用するパラメータをどのように知っていますか?同じ名前が付けられているのですか、それとも自動的に1番目と2番目のパラメータが渡されるのでしょうか? NextFunctionreq, resの代わりにblah, bleetの代わりに使用すると、それでも機能しますか?

答えて

15

これは、Connect(この動作の原因となるnode.jsミドルウェア)の意図的な側面です。ミドルウェアが受け取る関数nextは、ではなく、スタック内の次のミドルウェアであるです。次のミドルウェアにそれを処理するように依頼するConnectが生成する関数です(「次のミドルウェア」がない場合など)。

ミドルウェアが応答を返す必要がある場合は、そのようにしてください。すべきでない場合は、それ以降のミドルウェアが応答を返さなければならないことを意味します。処理の後半部分にデータを渡す必要がある場合は、要求オブジェクトreqの適切な部分にデータを添付する必要があります。

たとえば、添付のbodyParserミドルウェアは、要求本体の内容に基づいてreq.rawBodyおよびreq.bodyを投入する責任があります。バンドルされたbasicAuthミドルウェアは、HTTP認証に基づいてreq.remoteUserを生成します。

これは、エミュレートしようとするパターンです。ミドルウェアのスタックです。ミドルウェアのスタックは、要求を処理するために基本的な増分を行います。モデル化しようとしているものがこのパラダイムに適合しない場合は、リクエストを処理するための関数を1つだけ用意する必要があります。

関連する問題