Node/Express不起作用的帖子和评论路由



我正在做一个Crud项目(包括auth、posts和comments(,我在理解如何有效地进行路由并将posts与comments链接时遇到了一些困难。

这是我的评论路线:


router.post("/:id", auth, comCtrl.createComment);
router.post("/:id", auth, comCtrl.getPostComments);
router.post("/:id", auth, comCtrl.deleteComment);

和App.js:

app.use("/api", postRoutes);
app.use("/api/comments", comRoutes);

以及评论控制器,以便获得帖子的所有评论:

exports.getPostComments = async (req, res) => {
const { PostId } = req.params.id;
Comment.findAll({
where: {
PostId: PostId,
},
order: [["createdAt", "DESC"]],
include: [
{
model: User,
attributes: ["id", "firstName", "lastName", "imageUrl"],
},
],
order: [["createdAt", "ASC"]],
})
.then((comment) => {
res.status(200).send(comment);
})
.catch((err) =>
res.status(500).send({
err,
})
);
}; 

一个新评论的创建正在Postman中工作(例如,我有一个id为28的帖子;http://localhost:8000/api/comments/28",评论是创建的,并且确实与Post相关(,但是使用相同的URL发出GET请求以便从该Post中获取所有评论,我得到了错误404。

我做错了什么?

控制器看起来不错,但根据我的发现,将"/:id";在我的路线上到处都是一种糟糕的做法,但当我将其更改为"/:PostId";例如,它什么都不做。

router.post("/:id", auth, comCtrl.createComment);
router.post("/:id", auth, comCtrl.getPostComments);
router.post("/:id", auth, comCtrl.deleteComment);

router.post为POST请求注册一个处理程序。

当您收到/api/comments/28的HTTPPOST请求时,它将由comCtrl.createComment处理。

如果comCtrl.createComment随后调用next(第三个参数(——尽管我假设它不会,因为您没有尝试编写中间件——那么它将沿着处理程序列表传递给下一个匹配(comCtrl.getPostComments(。

当您收到/api/comments/28的HTTP get请求时,由于没有调用router.get(),因此没有处理程序,因此会收到404错误。(这应该是一个405的错误,但我不同意Express的设计决定(。

如果您想处理GET请求,那么您需要编写代码,说明收到GET请求时要做什么。

最新更新