问题描述
我已经定义了3个sequelize模型,将其导入到名为sequelize.js
的文件中,如下所示:
const { Sequelize } = require("sequelize");
const usermodel = require("./models/user");
const Itemmodel = require("./models/item");
const ReservationModel = require("./models/reservation");
const config = require("./dbconfig");
const db = config.database;
const Item = Itemmodel(sequelize,Sequelize);
const User = usermodel(sequelize,Sequelize);
const Reservation = ReservationModel(sequelize,Sequelize);
Reservation.hasMany(Item);
Item.belongsTo(Reservation);
Reservation.belongsTo(User);
然后我尝试导出它们:
module.exports = { Item,User,Reservation };
const Model = require("../../sequelize");
const passport = require("passport");
module.exports = (app) => {
app.post("/registerUser",(req,res,next) => {
passport.authenticate("register",(err,user,info) => {
if (err) {
console.log(err);
}
if (info !== undefined) {
console.log(info.message);
res.send(info.message);
} else {
req.logIn(user,(err) => {
const data = {
first_name: req.body.first_name,last_name: req.body.last_name,email: req.body.email,username: user.email,};
Model.User.findOne({
where: {
email: data.username,},}).then((user) => {
user
.update({
first_name: data.first_name,last_name: data.last_name,email: data.email,})
.then(() => {
console.log("user created in db");
res.status(200).send({ message: "user created" });
});
});
});
}
})(req,next);
});
};
产生
TypeError: User.findOne is not a function
当我只导出其中一个时,这不是问题。
module.exports = User;
const User = require("./sequelize");
...
User.findOne(...) //works
我尝试了多种导出方式,但是似乎都没有用。 例如
module.exports = {
Item: Item,User: User,Reservation: Reservation,}
和
exports.Item = Item;
exports.User = User;
exports.Reservation = Reservation;
编辑:这是我的用户模型供参考
module.exports = (sequelize,type) => {
return sequelize.define(
"user",{
id: {
type: type.INTEGER,primaryKey: true,autoIncrement: true,first_name: type.STRING,last_name: type.STRING,credentials: type.STRING,email: {
type: type.STRING,allowNull: false,password: {
type: type.STRING,{
tableName: "Users",}
);
};
为什么我不能导出这些多个对象?
解决方法
通过将所有sequelize模型导入一个文件然后进行模块,我将获得您正在使用的确切结构。将它们导出到一个对象中,我唯一看到的不同是如何定义模型。我可能已经过时了,但是我学到了这样的话:
const Sequelize = require('sequelize');
const db = require('../db');
module.exports = db.define('users',{
id: {
autoIncrement: true,primaryKey: true,type: Sequelize.INTEGER,unique: true
},},{
timestamps: true,});
Db声明
const Sequelize = require('sequelize');
const db = new Sequelize(
process.env.DATABASE_URL,{
logging: false
}
);
module.exports = db;
然后集中导入
const User = require('./user');
const Order = require('./order');
Order.belongsTo(User)
User.hasMany(Order)
module.exports = {
User,Order
};
然后使用它
const models = require('./models');
const results = await models.User.destroy({
where: {
id: id
}
});
if(results){
return results;
}
,
发现了问题所在。在我定义我的localStrategy的password.js文件中,我进行的导入不正确。
我在sequelize.js中的导出是
modules.export = {Item,User,Reservation};
而我在passport.js中的导入只是
const User = require("../sequelize");
应该在什么时候
const Model = require("../sequelize");
const User = Model.User;
好像我已将其正确导入到我的注册路线中,但未导入我的护照配置文件中!