这是我的 models/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;
}
这是我的 models/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 )
});
};
在本地主机中执行上述代码时,出现错误“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,将其从 Controller 和模型中删除
有一个示例存储库 here向您展示了如何将sequelize与express.js一起使用,我们通常使用像this这样的index.js这将遍历您的模型文件夹,您将能够使用 db['User']
关于node.js - User.findAll 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50604348/