这是我的消息控制器,我试图在创建消息后填充消息中的聊天,并且以同样的方式我想填充聊天的用户,但发件人填充正确,而其他人未填充。此外,我通过邮递员发送请求,并且 chatId 以字符串形式接收,即使我试图将其转换为 objectId,它也不起作用并且不填充
const Message = require("../models/messageSchema");
const User = require("../models/userSchema");
const Chat = require("../models/chatSchema");
module.exports.sendMessage = async function (req, res) {
const { chatId, content } = req.body;
if (!content || !chatId) {
console.log("Invalid data passed into the request");
return res.status(400).send("Internal Server Error");
}
var newMessage = {
sender: req.user.id,
content: content,
chatId: chatId,
};
try {
var message = await Message.create(newMessage);
message = await message.populate("sender", "name profileImage");
message = await message.populate("chat");
console.log(message.chat);
message = await User.populate(message, {
path: "chat.users",
select: "name email profileImage",
});
await Chat.findOneAndUpdate({ _id: chatId }, { latestMessage: message });
res.json(message);
// res.status(200).send(message);
} catch (error) {
console.log("Error in sending message", error);
res.status(400).send("Internal Server Error");
}
};
module.exports.fetchAllMessages = async function (req, res) {
try {
const messages = await Message.find({ chat: req.params.chatId })
.populate("sender", "name profileImage email")
.populate("chat");
console.log(messages);
res.status(200).send(messages);
} catch (error) {
console.log(`Error in fetching all the message ${error}`);
res.status(400).send("Internal Server Error !");
}
};
我的消息架构是
const mongoose = require("mongoose");
const messageSchema = mongoose.Schema(
{
sender: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
},
readBy: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
content: { type: String, trim: true },
chat: { type: mongoose.Schema.Types.ObjectId, ref: "Chat" },
},
{ timestamps: true }
);
const Message = mongoose.model("Message", messageSchema);
module.exports = Message;
`
我试图在消息中填充聊天内容,但收到未定义的消息
确保聊天对象具有正确的架构,包括用户字段(或引用用户的任何字段)以填充聊天中涉及的用户。 这是修改后的代码:
const Message = require("../models/messageSchema");
const User = require("../models/userSchema");
const Chat = require("../models/chatSchema");
module.exports.sendMessage = async function (req, res) {
const { chatId, content } = req.body;
if (!content || !chatId) {
console.log("Invalid data passed into the request");
return res.status(400).send("Internal Server Error");
}
try {
const newMessage = await Message.create({
sender: req.user.id,
content: content,
chat: chatId, // Assign chatId to the chat field directly
});
const populatedMessage = await newMessage
.populate("sender", "name profileImage")
.populate("chat")
.execPopulate();
console.log(populatedMessage.chat); // Check if chat is populated
const populatedChat = await Chat.findById(chatId).populate({
path: "users",
select: "name email profileImage",
});
await Chat.findByIdAndUpdate(chatId, { latestMessage: populatedMessage });
res.json(populatedMessage);
} catch (error) {
console.log("Error in sending message", error);
res.status(400).send("Internal Server Error");
}
};