提问人:KRISHNA MAHATO 提问时间:11/2/2023 更新时间:11/2/2023 访问量:30
未正确填充数据库
the database is not being populated correctly
问:
这是我的消息控制器,一旦创建聊天,我就会尝试在消息中填充聊天,并且以同样的方式我想填充聊天的用户,但发件人正确填充,而其他用户未填充。此外,我通过邮递员发送请求,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 !");
}
};
我的 messageSchema 是
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;
`
我试图在消息中填充聊天,但收到未定义
答:
0赞
Akeel Ahmed Qureshi
11/28/2023
#1
确保聊天对象具有正确的架构,包括用户字段(或引用用户的任何字段)以填充聊天中涉及的用户。 下面是一个修改后的代码:
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");
}
};
下一个:存储和缓存聊天消息数据
评论
chatId