Mongoose中this.findOne不是函数问题求助(已导入Mongoose)
解决Mongoose静态方法中
this.findOne不是函数的问题 以下是针对该问题的具体解决步骤:
1. 修正Schema拼写错误
你的代码里把UserSchema误写为UserShema(缺少字母c),这会导致静态方法挂载到了错误的对象上,进而引发this指向异常,找不到findOne方法。
2. 确保正确生成Model并调用静态方法
静态方法挂载到Schema后,必须通过mongoose.model()生成对应的Model,且只能通过Model本身调用该静态方法,不能直接调用Schema上的方法。
修正后的完整代码
const mongoose = require('mongoose') const bcrypt = require('bcrypt') // 定义正确的Schema结构 const UserSchema = new mongoose.Schema({ username: String, password: String // 可添加其他业务字段 }) // 挂载静态登录方法 UserSchema.statics.login = async function(username, password){ const user = await this.findOne({ username }); if (user) { const auth = await bcrypt.compare(password, user.password); if (auth) { return user; } throw new Error('incorrect password'); } throw new Error('incorrect username'); // 原错误提示与参数不符,建议统一 } // 生成对应的Model const User = mongoose.model('User', UserSchema) // 正确调用方式示例 // User.login('testUser', 'testPassword') // .then(user => console.log(user)) // .catch(err => console.log(err.message))
额外检查点
- 禁止直接调用
UserSchema.statics.login(),必须通过生成的UserModel调用静态方法,否则this无法指向Model实例,找不到findOne方法。 - 确认Schema中已定义
username、password等查询所需的字段,避免查询无结果。
内容的提问来源于stack exchange,提问作者user21485683
相关产品推荐
相关产品推荐

