【发布时间】: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