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

Node.js登录鉴权报错:users.findOne is not a function如何解决

问题根因

你导出的users模型是一个需要接收sequelize、Sequelize两个参数的工厂函数,直接require后得到的是函数本身,不是Sequelize模型实例,自然不存在findOne方法。


步骤1:正确实例化模型

你需要先完成Sequelize的数据库初始化,再传入参数拿到可用的模型对象:

const { Sequelize } = require('sequelize');
// 替换为你自己的数据库连接配置
const sequelize = new Sequelize('你的数据库名', '数据库账号', '数据库密码', {
  host: '127.0.0.1',
  dialect: 'mysql'
});
// 传入参数初始化模型,得到可用的模型实例
const UsersModel = require('./models/users')(sequelize, Sequelize);

步骤2:修正查询写法

Sequelize的查询条件需要放到where属性下,同时避免变量名冲突,修改接口代码:

app.post('/login', (req, res) => {
  const { email, password } = req.body;
  // 条件放到where字段下,使用初始化后的模型实例调用方法
  UsersModel.findOne({ where: { email, password } })
    .then(user => {
      if (!user) {
        return res.status(404).json({
          message: 'Auth Failed'
        })
      }
      res.status(200).json({
        message: 'Logg In succesfull'
      })
    })
    // 补充异常捕获逻辑,避免未处理的Promise报错
    .catch(err => {
      res.status(500).json({
        message: 'Server Error',
        error: err.message
      })
    })
})

可选优化(推荐)

一般项目中会在models文件夹下新建index.js统一初始化所有模型,避免每个用到模型的地方都重复写初始化逻辑。

小提示:当前逻辑直接明文比对密码,生产环境请务必使用bcrypt等加密工具对密码做哈希存储后再比对,避免数据泄露风险。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:54:04