下一步是啥();在这段代码中?
Posted
技术标签:
【中文标题】下一步是啥();在这段代码中?【英文标题】:What is next(); in this code?下一步是什么();在这段代码中? 【发布时间】:2013-08-25 18:27:03 【问题描述】:在这个 Express 应用程序(用于 Nodejs)中有一行代码使用 next();
,我不明白。不知道你能不能澄清一下。
在 index.js 中,express 应用调用了一个函数 isLoggedInMiddleware。它不传递任何参数
app.use(sessionHandler.isLoggedInMiddleware);
这就是那个函数。调用的时候没有传任何参数,但是设置成接受三个,next
是最后一个,作为getUsername的返回值调用。
this.isLoggedInMiddleware = function(req, res, next)
var session_id = req.cookies.session;
sessions.getUsername(session_id, function(err, username)
"use strict";
if (!err && username)
req.username = username;
return next();
);
这是 getUserName which next();作为 callbak 的一部分传递给。你能解释一下如何 next();被使用了?在这种情况下是什么?它在做什么?
this.getUsername = function(session_id, callback)
"use strict";
if (!session_id)
callback(Error("Session not set"), null);
return;
sessions.findOne( '_id' : session_id , function(err, session)
"use strict";
if (err) return callback(err, null);
if (!session)
callback(new Error("Session: " + session + " does not exist"), null);
return;
callback(null, session.username);
);
【问题讨论】:
【参考方案1】:它将控制权传递回快速应用程序以调用链中的下一个中间件/请求处理程序。
这里:
app.use(sessionHandler.isLoggedInMiddleware);
您告诉 express 使用 isLoggedInMiddleware
作为中间件。
每个中间件都会收到:
请求 - 丰富和/或查询, 响应 - 以防他们想写一些东西(即错误), 允许 express 继续处理请求的回调。该中间件在被 express 调用时,会使用用户数据丰富请求对象,然后将控件返回给 express,然后继续到下一个中间件或处理程序。
【讨论】:
所以这可能是代码中看不到的东西?只是 express 框架的一部分? 中间件进一步讨论:***.com/questions/10695629/…【参考方案2】:据我了解,它将控制权传递给下一个路由处理程序来处理请求。阅读Route Middleware。
【讨论】:
【参考方案3】:您将传递函数与调用混淆了。
app.use(sessionHandler.isLoggedInMiddleware);
这不是isLoggedInMiddleware
被调用;它只是被通过了。 app.use
接受一个应该是函数的参数;在请求期间,它将使用适当的参数(请求对象、响应对象和回调)调用该函数。
同样,
sessions.getUsername(session_id, function(err, username)
"use strict";
if (!err && username)
req.username = username;
return next();
);
next
的返回值没有被传递给getUsername
;整个函数正在被传递。通过调用next
,它将控制权交还给 express 框架(本质上说,“我完成了;调用下一个中间件”)。
【讨论】:
【参考方案4】:我认为next的调用意思很明显“请转到列表中的下一个中间件”。然而,更有趣的是为什么前面有一个return。
【讨论】:
以上是关于下一步是啥();在这段代码中?的主要内容,如果未能解决你的问题,请参考以下文章