सभी मॉडल अच्छे लगते हैं। मुद्दे संघों के साथ हैं।
यदि आप समान दो मॉडलों के बीच एक से अधिक संबद्धता को परिभाषित करते हैं, तो आपको प्रश्नों में उन्हें एक-दूसरे से अलग करने के लिए अलग-अलग उपनामों का संकेत देना चाहिए।
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'
});
साथ ही एसोसिएशन को उसी तरह परिभाषित करना बेहतर है या तो सीधे मॉडल परिभाषा के बाद या स्थिर विधि जैसे associate
में . बाद वाला दृष्टिकोण बेहतर है क्योंकि यह models
का उपयोग करके किसी भी क्रॉस-रेफरेंस के बिना प्रत्येक मॉडल को अपने मॉड्यूल में परिभाषित करने की अनुमति देता है। associate
. में पैरामीटर अन्य मॉडलों तक पहुँचने की विधि जो किसी दिए गए मॉडल से संबद्ध होनी चाहिए।
अंतिम नोट:एसोसिएशन को परिभाषित करने का प्रयास करें जहां एक एसोसिएशन परिभाषा के बाईं ओर एक मॉडल अपने associate
में है विधि। इसका मतलब है कि
models.Message.belongsTo(Conversations);
Message
में होना चाहिए मॉडल associate
विधि:
Message.belongsTo(models.Conversations);
इस तरह आप हमेशा जानते हैं कि एक निश्चित मॉडल से दूसरे मॉडल के लिंक को परिभाषित करने वाले सभी संघों को कहां खोजना है।
अपडेट करें
संदेश बनाते समय इसका उपयोग करने के लिए आपको मिली या बनाई गई बातचीत को एक चर में संग्रहीत करना चाहिए:
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",
});
then/catch
को मिलाने की कोशिश न करें और await
. यदि आप await
use का उपयोग करते हैं आपके पास पहले से ही एक परिणाम या अपवाद होगा (जिसे आप try/catch
. का उपयोग करके संभाल सकते हैं )।