Alle modeller ser godt ud. Problemerne er hos foreninger.
Hvis du definerer mere end én tilknytning mellem de samme to modeller, bør du angive forskellige aliaser for at skelne dem fra hinanden i forespørgsler.
User.hasMany(Messages, {
foreignKey: 'senderId',
as: 'OutgoingMessages'
});
User.hasMany(Messages, {
foreignKey: 'receiverId',
as: 'IncomingMessages'
});
Messages.belongsTo(models.User, {
foreignKey: "senderId",
as: 'Sender'
});
Messages.belongsTo(models.User, {
foreignKey: "receiverId",
as: 'Receiver'
});
Det er også bedre at definere associationer på samme måde enten direkte efter modeldefinition eller i en statisk metode som associate
. Sidstnævnte tilgang er at foretrække, fordi den gør det muligt at definere hver model i sit eget modul uden krydsreferencer ved hjælp af models
parameter i associate
metode til at få adgang til andre modeller, der skal være knyttet til en given model.
Sidste note:prøv at definere associationer, hvor en model på venstre side af en associationsdefinition i sin egen associate
metode. Det betyder, at
models.Message.belongsTo(Conversations);
skal være i Message
model associate
metode:
Message.belongsTo(models.Conversations);
På den måde ved du altid, hvor du kan finde alle associationer, der definerer links fra en bestemt model til andre modeller.
OPDATERING
Du bør gemme en fundet eller en oprettet samtale til en variabel for at bruge den, mens du opretter en besked:
let conversation = await Conversations.findOne({
where:{
user1:{[Op.or]:[req.user.id,post.userId]},
user2:{[Op.or]:[req.user.id,post.userId]},
PostId:req.body.postId,
}
})
if (!conversation){
conversation = await Conversations.create({
user1: req.user.id,
user2: post.userId,
PostId:req.body.postId,
})
}
const newMessage = await Messages.create({
senderId: req.user.id,
receiverId: post.userId,
message: req.body.message,
conversationId:conversation.id
})
res.status(201).send({
msg: "upload successful",
});
Forsøg ikke at blande then/catch
sammen og await
. Hvis du bruger await
du vil allerede have et resultat eller en undtagelse (som du kan håndtere ved at bruge try/catch
).