Node.js + Sequelize报错:User.find is not a function 问题求助
解决Sequelize报错:User.find is not a function
问题根源
- Sequelize模型没有
find()方法,查询全量数据的正确方法是findAll()。 - 模型导入方式可能有误——你的
user.js导出的是工厂函数,必须传入sequelize实例和DataTypes才能生成可用的模型实例。
修复方案
1. 替换查询方法
直接把路由代码里的User.find({})改成User.findAll({}),这是Sequelize获取所有记录的标准用法。
修正后的路由代码:
const router = require('express').Router(); const User = require('../models/user'); router.route('/getUser').post((req, res) => { User.findAll({}) .then(users => res.json(users)) .catch(err => res.status(400).json(`Error: ${err}`)); });
2. 确保模型正确初始化
如果你的项目用了Sequelize自动生成的models/index.js,不要直接导入user.js,从index.js中获取已初始化的模型:
const { User } = require('../models');
如果没有自动生成的index.js,需要手动传入参数初始化模型:
const sequelize = require('./你的sequelize实例路径'); const { DataTypes } = require('sequelize'); const User = require('../models/user')(sequelize, DataTypes);
补充说明
findAll()支持添加过滤、排序、分页等参数,比如只查询管理员用户:User.findAll({ where: { role: 'admin' }, order: [['username', 'ASC']] })- 查询单条记录可以用
findOne()或findByPk(),同样不要用find()。
内容的提问来源于stack exchange,提问作者hidy
相关产品推荐
相关产品推荐

