gpt4 book ai didi

node.js - Mongoose 方法未定义

转载 作者:可可西里 更新时间:2023-11-01 09:08:17 27 4
gpt4 key购买 nike

我正在尝试为我的用户模型创建一个“checkPassword”方法,但是每当我调用它时,我都会收到以下错误:

User.checkPassword(password, hash, function(err, samePassword){
^
TypeError: undefined is not a function

我对 Mongoose 还很陌生,所以我不确定哪里出错了。

users.js(用户模型)

var mongoose = require('mongoose'),
Schema = mongoose.Schema,
bcrypt = require('bcrypt');


var userSchema = new Schema({
email : {type: String, required: true, unique: true},
password : {type: String, required: true},
firstName : {type: String},
lastName : {type: String}
});


userSchema.methods.checkPassword = function checkPassword(password, hash, done){

bcrypt.compare(password, hash, function(err, samePassword) {
if(samePassword === true){
done(null, true);
} else {
done(null, false)
}
});
}

module.exports = mongoose.model('User', userSchema);

护照.js

var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
mongoose = require('mongoose'),
usersModel = require('../models/users'),
User = mongoose.model('User');


passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
}, function(email, password, done){

User.findOne({'email': email}, function(err, user){
if(user){

var hash = user.password;
User.checkPassword(password, hash, function(err, samePassword){
if(samePassword === true){
done(null, user);
}

等..

如果我 console.log 用户模型(在 passport.js 的开头),我可以看到该方法在那里,但我无法使用它。我的模型布局类似于文档中的布局:http://mongoosejs.com/docs/guide.html (实例方法部分)。

最佳答案

您正在声明一个实例 方法(意味着在User 模型/类的实例上调用)但您将其作为一个类调用 方法( Mongoose 用语中的 static method)。

这是一个小的演示:

var mongoose   = require('mongoose');
var testSchema = new mongoose.Schema({ test : String });

testSchema.methods.myFunc = function() {
console.log('test!');
};

var Test = mongoose.model('Test', testSchema);

// This will fail, because you're calling a class method.
Test.myFunc();

// This will work, because you're calling the method on an instance.
var test = new Test();
test.myFunc();

因此,在您的代码中,您应该将 User.checkPassword(...) 替换为 user.checkPassword(...)(并稍作重写) ,或者使用 userSchema.statics.checkPassword = function(...) 使其成为合适的类方法。

关于node.js - Mongoose 方法未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30649031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com