Node.js TypeError:done不是函数吗?

Node.js TypeError:done不是函数吗?,node.js,express,passport-local,Node.js,Express,Passport Local,您提供给passport.use的回调参数太多 app.post('/sign', passport.authenticate('signup', { successRedirect: 'login', failureRedirect: '/', failureFlash: true })); passport.use('signup', new LocalStrategy({ usernameField: "Email", passwordFie

您提供给passport.use的回调参数太多

app.post('/sign', passport.authenticate('signup', {

    successRedirect: 'login',
    failureRedirect: '/',
    failureFlash: true

}));

passport.use('signup', new LocalStrategy({

    usernameField: "Email",
    passwordField: "Password",
    passReqToCallback: true,

}, function(req, Email, Password, Name, Username, Confirm, done) {

    Name     = req.body.Name;
    Username = req.body.Username;
    Confirm  = req.body.Confirm;

    process.nextTick(function() {

        crud.findOne({ Email: Email }, function(err, user) {

            if (err) {
                return done(err);
            }

            if (user) {
                return done(null, false, console.log("Email is already used"));
            }

            var data = new crud();

            data.Confirm  = Confirm;
            data.Password = Password;
            data.Email    = Email;
            data.Username = Username;
            data.Name     = Name;

            data.save(function(err) {
                if (err) throw err;
                return done(null, data, console.log("Successfullt"));
            })
        })
    })
}));
它们的数量和顺序很重要,因为passport策略只提供某些参数来分配它们的值。而且,在JavaScript中,参数与它们的标识符/名称不匹配

使用passport local,并且将passReqToCallback设置为true时:

任何附加变量都应在函数体中使用var或let语句声明:

passport.use(..., function (req, username, password, done) {
    console.log(req      === arguments[0]); // true
    console.log(username === arguments[1]); // true
    console.log(password === arguments[2]); // true
    console.log(done     === arguments[3]); // true

    // ...
});

请添加一些关于问题的描述,而不仅仅是简单的代码。
passport.use(..., function (req, username, password, done) {
    console.log(req      === arguments[0]); // true
    console.log(username === arguments[1]); // true
    console.log(password === arguments[2]); // true
    console.log(done     === arguments[3]); // true

    // ...
});
var Name     = req.body.Name;
var Username = req.body.Username;
var Confirm  = req.body.Confirm;