mongodb 在express API中使用引用和填充

w8f9ii69  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(149)

我正在尝试构建API,以使用Express和MongoDB获取所有用户的消息,模式如下所示:

mongoose.model(
    "Messages",
    new mongoose.Schema({
        Creatore: { type: mongoose.Schema.Types.ObjectId, ref: "Users" },
        title: { type: String, required: true },
        text: { type: String, required: true },
        CreatedDate: { type: Date, required: true },
    })
);

字符串
在Express Server中添加新消息API:

router.post("/AddMessage",  async (req, res, next) => {
    let { title, text } = req.body;
    if (!title || !text) {
        return res.status(409).json({ message: "Missing Data" });
    }
    let newMessage = new Messages({
        Creatore: req.session.userId, //this does not work
        title: title,
        text: text,
        CreatedDate: new Date(),
    });
    try {
        await newMessage.save();
        res.send(200);
    } catch {
        res.send(409);
    }
});


当这个API被调用时,它没有填充Creatore字段。我在数据库中得到了这个:
_id:“654531b57c89295a96ace0aa”
标题:“留言”
文本:“消息”
创建日期:2023-11- 03 T17:45:25.525+00:00
__v:0
会话配置良好

app.use(
    session({
        secret: "imad",
        resave: false,
        saveUninitialized: false,
        store: store,
        cookie: {
            maxAge: 1000 * 60 * 60 * 24,
        },
    })
);

获取消息API:

router.get("/GetMessages", async (req, res) => {
    try {
        const messages = await Messages.find({}).populate('Creatore');
        res.json(messages);
    } catch (err) {
        res.status(500).json({ error: "Failed to fetch messages" });
    }
});


这不会在Creatore字段中填充User
我希望在调用Get Messages API时返回一个JSON,填充Creatore字段中的消息所有者,我不知道这是否是因为会话库不允许我传递会话中的用户ID。

Session文档示例:

_id:“ekhtIyX1jC9HAtQa45M9ZaAhdrOeA-dy”
2019 -11-04T17:32:45.862+00:00
会话:对象
Cookie:Object
用户ID:“65452 e9 c97 eaa 2c 238 dfa 6 e1”
我真的很努力地想找到解决这个问题的办法。请帮忙吗?

mw3dktmi

mw3dktmi1#

我发现了问题:

const response = await fetch("http://localhost:3000/AddMessage", {
  method: "POST",
  credentials: "include",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify(values),
});

字符串
我应该允许凭据,这是开发时非常重要的一步,允许cookie通过请求进入您的服务器。

相关问题