2017-07-04 4 views
0

Ich arbeite mit Sequelize auf einer Angular und Nodejs gebaute Anwendung. Ich habe ein Benutzermodell erstellt, das viele Benachrichtigungen als Absender hat und viele Benachrichtigungen als Empfänger hat. Das Benachrichtigungsmodell gehört auch zu Benutzer als Absender und gehört zu Benutzer als Empfänger. Mein Problem ist, wenn ich versuche, eine GET HTTP-Anfrage für die Benachrichtigungen zu implementieren, erhalte ich einen Sequelize Eager Loading Error. Ich habe die Include-Anweisung sowie das Benachrichtigungsattribut für den Benutzer auskommentiert, und die GET-Anforderung funktioniert. Ich verstehe einfach nicht, was den Fehler verursacht.Sequelize Eeager Ladefehler - Kann nicht herausfinden Include

Hier sind meine Modelle.

"verwenden Sie streng";

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

Und hier ist meine Benachrichtigungen Controller, der die Logik für die Notifications Routen enthält.

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

Wenn ich auch irgendwie einen besseren Fehler bekommen könnte, würde ich in der Lage sein, um es herauszufinden. Der Fehler ist sehr verallgemeinert und hilft mir nicht zu verstehen, was falsch geschrieben, falsch platziert oder usw. ist. Kann jemand herausfinden, was das Problem ist?

Antwort

0

Ich vermisste den as: Parameter in meiner Include-Option. Wenn Sie mehrere Instanzen desselben Modells für dasselbe Modell verwenden (wie Benutzer, Benutzer beide für Benachrichtigung), müssen Sie Aliase verwenden, um sie mit der Option as: zu identifizieren. Viel Glück!

Verwandte Themen