2017-07-04 9 views
0

私はAngularとNodejsで構築されたアプリケーションで続けることに取り組んでいます。私は、送信者としてhasMany notficationsを持ち、受信者としてhasMany通知を持つUserモデルを構築しました。通知モデルはまた、送信者としてのbelongsTo Userおよび受信者としてのbelongsToユーザも含む。私の問題は、通知でGET httpリクエストを実装しようとすると、Sequelize Eager Loading Errorが表示されます。私はincludeステートメントとuserのnotifications属性をコメントアウトしています.GETリクエストが機能します。私はエラーの原因を理解していません。Sequelize Eeagerの読み込みエラー - インクルードが見つかりませんでした。

私のモデルです。

"use strict";

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 
     }); 
    }); 
    }, 

何らかの理由でより良いエラーが発生しても、私はそれを理解することができます。エラーは非常に一般化されており、スペルミスや間違っていることなどを理解するのに役立ちません。

答えて

0

私のincludeオプションにas:パラメータがありませんでした。同じモデルで同じモデルの複数のインスタンスを使用している場合(「User」、「User」ともに「Notification」の場合)、別名を使用して、include:でas:オプションを指定する必要があります。がんばろう!

関連する問題