Semua model terlihat bagus. Masalahnya ada pada asosiasi.
Jika Anda mendefinisikan lebih dari satu asosiasi antara dua model yang sama, Anda harus menunjukkan alias yang berbeda untuk membedakannya satu sama lain dalam kueri.
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'
});
Juga lebih baik untuk mendefinisikan asosiasi dengan cara yang sama baik secara langsung setelah definisi model atau dalam metode statis seperti associate
. Pendekatan terakhir lebih disukai karena memungkinkan untuk mendefinisikan setiap model dalam modulnya sendiri tanpa referensi silang menggunakan models
parameter di associate
metode untuk mengakses model lain yang harus dikaitkan dengan model tertentu.
Catatan terakhir:coba definisikan asosiasi di mana model di sisi kiri definisi asosiasi dalam associate
-nya sendiri metode. Artinya
models.Message.belongsTo(Conversations);
harus dalam Message
model associate
metode:
Message.belongsTo(models.Conversations);
Dengan begitu, Anda selalu tahu di mana menemukan semua asosiasi yang mendefinisikan tautan dari model tertentu ke model lain.
PERBARUI
Anda harus menyimpan percakapan yang ditemukan atau dibuat ke variabel untuk menggunakannya saat membuat pesan:
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",
});
Jangan mencoba mencampuradukkan then/catch
dan await
. Jika Anda menggunakan await
Anda sudah memiliki hasil atau pengecualian (yang dapat Anda tangani menggunakan try/catch
).