Javascript 为什么抛出user.validPassword不是函数错误?

Javascript 为什么抛出user.validPassword不是函数错误?,javascript,node.js,express,passport.js,passport-local,Javascript,Node.js,Express,Passport.js,Passport Local,我正在构建node.js应用程序,我使用的是Passport js,我从它的官方网站上阅读了Passport local doumentation,我使用了它的local Passport策略,它抛出了user.validPassword不是一个函数错误 app.js require('./config/test')(passport); app.use(passport.initialize()); app.use(passport.session()); router.get('/test

我正在构建node.js应用程序,我使用的是Passport js,我从它的官方网站上阅读了Passport local doumentation,我使用了它的local Passport策略,它抛出了user.validPassword不是一个函数错误

app.js

require('./config/test')(passport);
app.use(passport.initialize());
app.use(passport.session());
router.get('/test', (req, res, next)=>{
  res.render('test');
});
router.post('/test',
  passport.authenticate('local', { successRedirect: '/',
                                   failureRedirect: '/test',
                                   failureFlash: true })
);
var passport = require('passport')
    , LocalStrategy = require('passport-local').Strategy;
const User = require('../model/students');

module.exports = function () {
    passport.use(new LocalStrategy(
        function (username, password, done) {
            User.findOne({ username: username }, function (err, user) {
                if (err) { return done(err); }
                if (!user) {
                    return done(null, false, { message: 'Incorrect username.' });
                }
                if (!user.validPassword(password)) {
                    return done(null, false, { message: 'Incorrect password.' });
                }
                return done(null, user);
            });
        }
    ));
}
index.js

require('./config/test')(passport);
app.use(passport.initialize());
app.use(passport.session());
router.get('/test', (req, res, next)=>{
  res.render('test');
});
router.post('/test',
  passport.authenticate('local', { successRedirect: '/',
                                   failureRedirect: '/test',
                                   failureFlash: true })
);
var passport = require('passport')
    , LocalStrategy = require('passport-local').Strategy;
const User = require('../model/students');

module.exports = function () {
    passport.use(new LocalStrategy(
        function (username, password, done) {
            User.findOne({ username: username }, function (err, user) {
                if (err) { return done(err); }
                if (!user) {
                    return done(null, false, { message: 'Incorrect username.' });
                }
                if (!user.validPassword(password)) {
                    return done(null, false, { message: 'Incorrect password.' });
                }
                return done(null, user);
            });
        }
    ));
}
config/test.js

require('./config/test')(passport);
app.use(passport.initialize());
app.use(passport.session());
router.get('/test', (req, res, next)=>{
  res.render('test');
});
router.post('/test',
  passport.authenticate('local', { successRedirect: '/',
                                   failureRedirect: '/test',
                                   failureFlash: true })
);
var passport = require('passport')
    , LocalStrategy = require('passport-local').Strategy;
const User = require('../model/students');

module.exports = function () {
    passport.use(new LocalStrategy(
        function (username, password, done) {
            User.findOne({ username: username }, function (err, user) {
                if (err) { return done(err); }
                if (!user) {
                    return done(null, false, { message: 'Incorrect username.' });
                }
                if (!user.validPassword(password)) {
                    return done(null, false, { message: 'Incorrect password.' });
                }
                return done(null, user);
            });
        }
    ));
}
节点版本:10.16.1

快速版本:4.16.1


发生此类错误的原因是.validPassword(密码)不是“用户”下的函数。简单的例子:

//I use this code on google.com main page.
var logo = document.querySelector("#hplogo");
logo.validPassword(""); // -> Error: .validPassword is not a function
// here I declare function under 'validPassword'
logo.validPassword = function(pass){
console.log("Validate password", pass);
};
logo.validPassword(""); // -> message: 'Validate password',''

所以我猜您丢失了函数本身。

它会抛出该错误,因为user.validPassword不是一个函数-它在哪里定义的?我从它的官方网站复制了它,它不正确吗!!也许你错过了一个步骤-唯一未知的是
用户
-也许你创建了一个错误的步骤。。。我认为有一些字段叫做
username
password
这是否回答了您的问题?