node.js - User.findAll 不是函数
问题描述
这是我的模型/user.js
var sequelize = require('sequelize');
var bcrypt = require('bcrypt');
module.exports = function(sequelize, DataTypes) {
const User = sequelize.define('users', {
user_id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
user_name: DataTypes.DATE,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {
freezeTableName: true,
instanceMethods: {
generateHash(password) {
return bcrypt.hash(password, bcrypt.genSaltSync(8));
},
validPassword(password) {
return bcrypt.compare(password, this.password);
}
}
});
return User;
}
这是我的模型/index.js
module.exports = {
User: require('./user')
};
这是我的 UserController.js
var sequelize = require("sequelize");
var models = require("../models/index");
var userController = {};
// Show list of users
userController.list = function(req, res) {
models.User.findAll()
.then( userResponse => {
res.status( 200 ).json( userResponse )
})
.catch( error => {
res.status( 400 ).send( error )
});
};
在 localhost 中执行上述代码时,会出现“User.findAll 不是函数”的错误。我尝试了各种方法,但没有结果。需要帮忙。我正在使用 express - nodejs - Sequelize(mysql2)
解决方案
您需要将一个 sequelize 实例和一个 DataTypes 传递给您的 User.js
module.exports = function(sequelize, DataTypes)
因此,为了做到这一点,您应该将您的 models/index.js 更改为类似的内容。
var Sequelize = require("sequelize");
var user = require("./user");
var sequelize = new Sequelize("your db config goes here");
module.exports = {
User: user(sequelize, Sequelize.DataTypes),
}
而且您不需要在每个文件中都要求 sequelize,将其从控制器和模型中删除
这里有一个示例 repo ,向您展示如何将 sequelize 与 express.js 一起使用,我们通常使用这样的 index.js ,它将通过您的模型文件夹,您将能够使用访问模型db['User']
推荐阅读
- computer-vision - 如何在 pytorch 上保存训练有素的模型的权重?
- go - 我如何用接口重构这段代码,如果是这样,我应该吗?
- c - 当工作区位于 ~/src 而不是 /tmp 时,VS Code 在“stdio.h”下显示红色曲线
- coded-ui-tests - 数据:“无法反序列化 params.x - 绑定:第 47 位缺少必填字段”
- java - 使用 LinkedLists 在 Java 中添加多项式
- python - 获取数组中单选按钮的内容
- javascript - 如何使用 getUserMedia() 选择要激活的相机以进行条码扫描功能?
- python - 关于 Freecodecamp 练习的 Pandas 数据规范化解释?
- ios - 固定单元宽度 - 无法同时满足约束
- wpf - 如何在鼠标位置放大或缩小时正确同步 WPF Scrollviewer 和 Canvas