什么是属性"完成"在NodeJS?

时间:2015-02-22 10:25:56

标签: 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的新手,而且我不明白像#34;做了什么这样的价值"可以是一个函数(返回完成(错误))。有没有系统功能?

非常感谢!

2 个答案:

答案 0 :(得分:30)

done是您完成工作后需要致电的回调。正如您所看到的,在代码的第一行中给出了它:

function(req, email, password, done){

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

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

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

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

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

就是这样: - )

答案 1 :(得分:8)

在JavaScript中,函数是第一类对象。

它们可以存储在变量中,并像任何其他数据一样传递。

函数声明在当前作用域中创建一个与函数同名的变量。



function call_done(done) {
    done();
}

function some_function () {
    alert("Ta da");
}

call_done(some_function);