javascript - NodeJS 中的 "done"属性是什么?

标签 javascript node.js passport.js

我正在按照本教程在 NodeJS 中编写本地登录代码:

https://scotch.io/tutorials/easy-node-authentication-setup-and-local

在 config/passport.js 文件中

function(req, email, password, done){
    process.nextTick(function(){
        User.findOne({'local.email' :   email}, function(err, user){
            if(err)
                return done(err);
            if (user){
                return done(null, false, req.flash('signupMessage', 'message'));
            }

我是 NodeJS 和 Javascript 的新手,我不明白像“done”这样的值如何成为函数(返回 done(err))。有系统功能吗?

非常感谢!

最佳答案

done 是您完成工作后需要调用的回调。如您所见,它在代码的第一行中给出:

function(req, email, password, done){

这意味着除了传入的请求之外,您还会获得用户指定的 emailpassword。现在您需要做任何您需要做的事情来验证登录。您需要以某种方式告诉 Passport 您是否成功。

通常,您可以为此使用返回值,但在这种情况下,Passport 作者考虑了您的检查可能是异步的选项,因此使用返回值是行不通的。

这就是使用回调的原因。大多数情况下,回调被称为 callback,但这只是为了方便,没有技术上的理由这样做。在这种情况下,由于回调用于显示您已完成完成,因此 Passport 作者建议将其称为 done

现在,如果凭据验证失败,您可以调用 done 并显示错误,或者使用适当的参数表明验证成功。

之所以有效,是因为函数在 JavaScript 中是所谓的一等公民,即代码和数据之间没有实际区别:在 JavaScript 中,您可以将函数作为参数传递并返回值可以用数据。

就是这样:-)

关于javascript - NodeJS 中的 "done"属性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656780/

相关文章:

javascript - 为什么 Javascript 的 "in"运算符始终比与未定义的严格成员比较慢?

javascript - jQuery 和输入表单

node.js - Ember、Ember 数据、MongoDB _id 和命名空间

Node.js - 检查用户是否存在

FacebookToken错误: Error validating client secret

javascript - 在某些情况下没有 'Access-Control-Allow-Origin' header 错误,但在其他情况下则没有

javascript - 使用 document.body.innerHTML.replace 有多安全?

javascript - Sinon JS stub HTTP 请求

node.js - http.Server 的 'connect' 事件从未被调用

mysql - Nodejs Passport 设置困惑