NodeJS中的“完成”属性是什么?

我在本教程中编写了NodeJS中的本地login:

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的新手,我不明白像“完成”这样的值是一个函数(return done(err))。 有任何系统function?

非常感谢!

done是一个callback,你需要打电话,一旦你完成你的工作。 正如你可以看到它是在你的代码的第一行给出的:

 function(req, email, password, done){ 

这意味着,除了传入的请求,您将获得用户指定的emailpassword 。 现在你需要做任何你需要做的来validationlogin。 不知怎的,你需要告诉护照你是否成功。

通常情况下,您可以使用返回值,但在这种情况下,Passport作者认为您的支票可能是asynchronous的,因此使用返回值是行不通的。

这就是为什么使用callback。 大多数callback被称为callback ,但这只是为了方便,没有技术理由这样做。 在这种情况下,由于callback被用于显示你已经完成 ,护照作者build议将其称为done

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

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

就是这样:-)

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

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

函数声明在当前范围内创build一个与函数名称相同的variables。

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