NodeJS 中的 "done" 属性是什么?
What is the attribute "done" in NodeJS?
我正在按照本教程在 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" 这样的值如何成为一个函数(return 完成(错误))。有没有系统功能?
非常感谢!
done
是您完成工作后需要调用的回调。如您所见,它在代码的第一行中给出:
function(req, email, password, done){
这意味着除了传入的请求之外,您还可以获得用户指定的 email
和 password
。现在您需要做任何您需要做的事情来验证登录。您需要以某种方式告诉 Passport 您是否成功。
通常,您可以为此使用 return 值,但在这种情况下,Passport 作者考虑了您的检查可能是异步的选项,因此使用 return 值将不起作用.
这就是使用回调的原因。大多数情况下回调被调用 callback
,但这只是为了方便,没有技术原因。在这种情况下,由于回调用于显示您已完成完成,Passport 作者建议将其命名为done
.
现在,如果凭据验证失败,您可以调用 done
并显示错误,或者使用适当的参数来表明验证成功。
这是有效的,因为函数在 JavaScript 中是所谓的 first-class citizens,即代码和数据之间没有实际区别:在JavaScript 您可以像处理数据一样将函数作为参数和 return 值传递。
就是这样:-)
在 JavaScript 中,函数首先是 class 个对象。
它们可以存储在变量中并像任何其他数据一样传递。
函数声明在当前范围内创建一个与函数同名的变量。
function call_done(done) {
done();
}
function some_function () {
alert("Ta da");
}
call_done(some_function);
我正在按照本教程在 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" 这样的值如何成为一个函数(return 完成(错误))。有没有系统功能?
非常感谢!
done
是您完成工作后需要调用的回调。如您所见,它在代码的第一行中给出:
function(req, email, password, done){
这意味着除了传入的请求之外,您还可以获得用户指定的 email
和 password
。现在您需要做任何您需要做的事情来验证登录。您需要以某种方式告诉 Passport 您是否成功。
通常,您可以为此使用 return 值,但在这种情况下,Passport 作者考虑了您的检查可能是异步的选项,因此使用 return 值将不起作用.
这就是使用回调的原因。大多数情况下回调被调用 callback
,但这只是为了方便,没有技术原因。在这种情况下,由于回调用于显示您已完成完成,Passport 作者建议将其命名为done
.
现在,如果凭据验证失败,您可以调用 done
并显示错误,或者使用适当的参数来表明验证成功。
这是有效的,因为函数在 JavaScript 中是所谓的 first-class citizens,即代码和数据之间没有实际区别:在JavaScript 您可以像处理数据一样将函数作为参数和 return 值传递。
就是这样:-)
在 JavaScript 中,函数首先是 class 个对象。
它们可以存储在变量中并像任何其他数据一样传递。
函数声明在当前范围内创建一个与函数同名的变量。
function call_done(done) {
done();
}
function some_function () {
alert("Ta da");
}
call_done(some_function);