You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js登录路由自定义函数失效:user.isValidPassword不是函数

问题解决:user.isValidPassword is not a function 错误修复

核心问题分析

你的代码存在两个关键错误导致该问题:

  • 实例方法定义错误:Mongoose的实例方法需要挂载到schema.methods对象(复数形式),你写成了schema.method(单数),导致方法未被正确绑定到用户实例。
  • 箭头函数this指向异常:isValidPassword使用箭头函数,箭头函数不会绑定自身的this,既无法访问实例的password属性,也无法被识别为合法的实例方法。

修复后的user.model.js关键代码

替换原isValidPassword方法的错误写法:

// 正确的实例方法定义
userSchema.methods.isValidPassword = async function(password) {
    return await bcrypt.compare(password, this.password);
}

额外优化点

  1. 注册环节的JWT生成代码有误:原代码const token = await userModel.generateJWT; 应改为实例调用,且该方法为同步方法无需await,正确写法:
    const token = user.generateJWT();
    
  2. 确保注册时密码已通过hasPassword静态方法加密存储,否则即使修复登录逻辑,密码对比仍会失败。

验证修复

重启服务后,发送登录请求:

{
    "email": "test@test.com",
    "password": "thisistestpassword"
}

此时应能正常完成密码校验,返回用户信息与JWT令牌。

内容的提问来源于stack exchange,提问作者Tejashv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:27:14