【问题标题】:Sequelize Eeager Loading Error - Can't figure out includeSequelize Eeager Loading Error - 无法弄清楚包含
【发布时间】:2017-12-08 07:29:23
【问题描述】:

我正在使用 Angular 和 Nodejs 构建的应用程序进行续集。我已经建立了一个用户模型,它有许多通知作为发送者,有许多通知作为接收者。通知模型也作为发送者属于用户,作为接收者属于用户。我的问题是当我尝试在通知上实现 GET http 请求时,我收到 Sequelize Eager Loading Error。我已经注释掉了 include 语句以及用户的通知属性,并且 GET 请求有效。我只是不明白是什么导致了错误。

这是我的模型。

“使用严格”;

module.exports = function(sequelize, DataTypes) {
  var Notification = sequelize.define("Notification", {
    startAddress: DataTypes.STRING,
    endAddress: DataTypes.STRING,
    tripDate: DataTypes.DATE,
    tripHour: DataTypes.INTEGER,
    numberOfPassengers: DataTypes.INTEGER,
    price: {
      type: DataTypes.INTEGER,
      defaultValue: -1
    }
  });
  Notification.associate = function(models) {
    Notification.belongsTo(models.User, {
      as: "sender",
      onDelete: "CASCADE",
      foreignKey: "senderId"
    });
    Notification.belongsTo(models.User, {
      as: "receiver",
      onDelete: "CASCADE",
      foreignKey: "receiverId"
    });
  };
  return Notification;
};



"use strict";

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define("User", {
    email: DataTypes.STRING,
    password: DataTypes.STRING,
    profileImgUrl: DataTypes.STRING,
    fName: DataTypes.STRING,
    lName: DataTypes.STRING,
    yearOfBirth: DataTypes.INTEGER,
    gender: DataTypes.STRING,
    ratings: {
      type: DataTypes.ARRAY(DataTypes.INTEGER),
      defaultValue: [5]
    },
    createdAt: {
      type: DataTypes.DATE,
      defaultValue: sequelize.literal('NOW()')
    },
    updatedAt: {
      type: DataTypes.DATE,
      defaultValue: sequelize.literal('NOW()')
    }
  });
  User.associate = function(models) {
    User.hasMany(models.RideRequest, {
      onDelete: "CASCADE",
      foreignKey: "riderId"
    });
    User.hasMany(models.DriveRequest, {
      onDelete: "CASCADE",
      foreignKey: "driverId"
    });
    User.hasMany(models.Notification, {
      as: 'sender',
      onDelete: "CASCADE",
      foreignKey: "senderId"
    });
    User.hasMany(models.Notification, {
      as: 'receiver',
      onDelete: "CASCADE",
      foreignKey: "receiverId"
    });
  };
  return User;
};

这是我的通知控制器,它包含通知路由的逻辑。

list: function list(req,res) {
    var decoded = jwt.decode(req.query.token);
    return model.User.findOne({
      where: {id: decoded.user.id},
      include: [{
        model: model.Notification
      }]
    }).then(function (user) {
        let ratingAv;
        for (let rating of user.ratings) {
          ratingAv = (user.ratings.length/(rating += rating)*10);
        }
        console.log(ratingAv + ' RATINGSSSS');
        let resObj = Object.assign({}, {
          id: user.id,
          profileImgUrl: user.profileImgUrl,
          fName: user.fName,
          lName: user.lName,
          yearOfBirth: user.yearOfBirth,
          gender: user.gender,
          ratings: ratingAv,
          notifications: user.Notifications.map(function(notification) {
            return Object.assign({}, {
              id: notification.id,
              startAddress: notification.startAddress,
              endAddress: notification.endAddress,
              tripDate: notification.tripDate,
              tripHour: notification.tripHour,
              numberOfPassengers: notification.numberOfPassengers,
              price: notification.price,
              senderId: notification.senderId,
              receiverId: notification.receiverId
            });
          })
        });
      return res.status(201).json({
        message: 'Notifications retrieved successfully',
        obj: resObj
      });
    }).catch(function (err) {
      return res.status(400).json({
        title: 'There was an error retrieving notifications',
        error: err
      });
    });
  },

如果我能以某种方式得到一个更好的错误,我就能弄清楚。该错误非常笼统,无法帮助我理解可能拼写错误、放错地方等的内容。任何人都可以找出问题所在吗?

【问题讨论】:

    标签: javascript node.js http error-handling sequelize.js


    【解决方案1】:

    我的包含选项中缺少 as: 参数。如果您在同一模型上使用同一模型的多个实例(作为用户,用户都在通知上),那么您需要使用别名来识别它们,并在 include: 上使用 as: 选项。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-09
      • 2017-12-08
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2014-08-02
      相关资源
      最近更新 更多