4

私はノードjs/Expressを使用して(サイズの)大きなプログラムを書いています。

私は複数のapp.post関数とすべてを持っています。したがって、それらのほとんどは、来たる要求に対して検証を行い、応答を送信する必要があります。

そこで、Validate()という関数を作成しました。検証が失敗した場合は、「検証が失敗した情報で再試行してください」という応答を送信します。

だから、私は作成しました

function validate() { ...}

の中に

app.post('/',function(req,res){
...

validate();
}

reqのすべての必要なパラメーターは、DBに書き込んでいるので、どこにでもアクセスできるので、今は問題になりません。問題は次のとおりです。「res」オブジェクトを送信するにはどうすればよいですか。resを呼び出そうとした場合は、今すぐvalidateに書き込みます。定義されていないと文句を言います。

だからこれを解決する方法。

2)validate()の応答をDBに書き込もうとしました。その後、私はresを呼び出そうとしました:つまり:

app.post('/',function(req,res){
...

validate();

res ..
}

ノードはasycであるため、この関数の検証応答はresによって使用されません。

このような問題に遭遇した人はいますか

4

1 に答える 1

9

それらを引数として渡す必要があります。

function validate(req, res) {
    // ...
}
app.post('/', function (req, res) {
    validate(req, res);

    // ...
});

nextリクエストが有効であると見なされたときに、3番目の引数を呼び出してカスタムミドルウェアとして定義し、app.post別のミドルウェアとしてcallback渡すこともできます。

function validate(req, res, next) {
    var isValid = ...;

    if (isValid) {
        next();
    } else {
        res.send("please try again");
    }
}
app.post('/', validate, function (req, res) {
    // validation has already passed by this point...
});

Expressでのエラー処理は、で役立つ場合もありますnext(err)

于 2012-12-17T05:43:15.027 に答える