Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
558 views
in Technique[技术] by (71.8m points)

node.js - in express how multiple callback works in app.get

I am newbie in node so please forgive me if i am not getting obvious. In node.js express application for app.get function we typically pass route and view as parameters e.g.

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

but in passport-google example I found that they are calling it as

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

where ensureAuthenticated is a function

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

In short this means there are multiple callbacks which while running are called in series. i tried adding couple of more functions to make it look like

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

and i found ensureAuthenticated, dummy1, dummy2, user.list is getting called in series.

for my specific requirement i find calling functions sequentially in above form is quite elegant solution rather that using async series. can somebody explain me how it really works and how i can implement similar functionality in general.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

In Express, each argument after the path is called in sequence. Usually, this is a way of implementing middleware (as you can see in the example you provided).

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
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...