node.js 入門



app.getで複数のコールバックがどのように機能するかを明示的に (1)

私はノードの初心者ですので、私が明白になっていないならば私を許してください。 app.get関数のnode.jsエクスプレスアプリケーションでは、通常、routeとviewをパラメータとして渡します。

app.get('/users', user.list);

しかし、 パスポートグーグルの例では、彼らはそれをと呼んでいることがわかりました

app.get('/users', ensureAuthenticated, user.list);

ensureAuthenticatedが関数であるところ

function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) { return next(); }
    res.redirect('/login')
}

つまり、実行中に連続して呼び出されるコールバックが複数あるということです。 私はそれがのように見えるようにするためにもっと多くの機能をいくつか追加してみました

app.get('/users', ensureAuthenticated, dummy1, dummy2, user.list);

そして、verifyAuthenticated、dummy1、dummy2、user.listが順番に呼び出されているのがわかりました。

私の特定の要件のために私は上記の形式で関数を連続して呼び出すことは非同期シリーズを使用することよりもむしろ非常に洗練された解決策であると思います。 誰かがそれが実際にどのように機能するのか、そして私がどのように一般的に同様の機能を実装することができるのかを私に説明できますか。


Expressでは、パスの後の各引数は順番に呼び出されます。 通常、これはミドルウェアを実装する方法です(あなたが提供した例でわかるように)。

app.get('/users', middleware1, middleware2, middleware3, processRequest);

function middleware1(req, res, next){
    // perform middleware function e.g. check if user is authenticated

    next();  // move on to the next middleware

    // or

    next(err);  // trigger error handler, usually to serve error page e.g. 403, 501 etc
}




asynccallback