栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

node.js回调中“ done”和“ next”之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

node.js回调中“ done”和“ next”之间的区别

这是快递和护照这两个框架之间的区别吗?

不,它们的用途不同。Express用作node.js上的应用程序框架,其中护照仅处理Web应用程序的身份验证部分。

关于next()

next()是连接的一部分,而连接又是一个明确的依赖关系。调用next()的目的是触发快速堆栈中的下一个中间件。

为了

next()
更轻松地理解该概念,您可以在 此处查看 基于
express
构建的示例应用程序。

如您所指出的那样,该应用程序使用路由级中间件来检查用户是否已登录。

app.get('/account', ensureAuthenticated, function(req, res){

在这里,ensureAuthenticated是在底部定义的中间件,例如

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

如您所见,如果用户通过了身份验证,则该函数会调用

next()
并将控制权传递给上面编写的路由处理程序中的下一层,否则它将重定向到另一条路由,即使不调用
next()

关于done()

另一方面,done()用于触发我们为护照认证编写的返回URL处理程序。要了解有关工作原理的更多
信息
,请查看
此处护照
上的代码示例,然后查看标题为“
自定义回调”* 的部分。 *

app.get('/login', function(req, res, next) {  passport.authenticate('local', function(err, user, info) {    if (err) { return next(err); }    if (!user) { return res.redirect('/login'); }    req.logIn(user, function(err) {      if (err) { return next(err); }      return res.redirect('/users/' + user.username);    });  })(req, res, next);});

此处的第二个参数

passport.authenticate
done()
您将要通过护照策略调用的定义。

注意

在这里,通过上面我提供的两个链接中的示例代码,比文档更有助于理解其行为。我建议您也这样做。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430720.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号