このチュートリアルに従って、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(err))。システム機能はありますか?
どうもありがとう!
done
はコールバックで、作業が完了したら呼び出す必要があります。ご覧のとおり、コードの最初の行に記載されています。
function(req, email, password, done){
これは、着信要求に加えて、ユーザー指定のemail
およびpassword
を取得することを意味します。ログインを確認するために必要なことは何でもする必要があります。どういうわけか、成功したかどうかをPassportに伝える必要があります。
通常、これには戻り値を使用できますが、この場合、Passportの作成者は、チェックが非同期である可能性があるオプションを考えたため、戻り値を使用しても機能しません。
これが、コールバックが使用されている理由です。ほとんどの場合、コールバックはcallback
と呼ばれますが、これは便宜上のものであり、技術的な理由はありません。この場合、コールバックはdoneであることを示すために使用されているため、Passportの作成者はdone
と呼ぶことを提案しました。
資格情報の検証に失敗した場合はエラーで、または成功したことを示す適切なパラメーターを使用して、done
を呼び出すことができます。
これが機能するのは、関数がJavaScriptでいわゆるfirst-class citizensであるためです。つまり、コードとデータの間に実際の違いはありません。JavaScriptでは、 。
以上です :-)
JavaScriptでは、関数はファーストクラスオブジェクトです。
これらは変数に格納され、他のデータと同様に渡されます。
関数宣言は、現在のスコープで、関数と同じ名前の変数を作成します。
function call_done(done) {
done();
}
function some_function () {
alert("Ta da");
}
call_done(some_function);