无法从单个文件导出多个Sequelize模型

问题描述

我已经定义了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;

好像我已将其正确导入到我的注册路线中,但未导入我的护照配置文件中!