NodeJS 在Node/Express不工作的情况下发送帖子和留言

im9ewurl  于 2022-11-04  发布在  Node.js
关注(0)|答案(1)|浏览(99)

我正在做一个Crud项目(有授权,帖子和评论),我有一个小麻烦,了解如何有效地做我的路由和链接帖子与评论。
这是我的意见路由:

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”上发出帖子请求,创建了评论,并且确实与帖子相关),但是为了从该帖子中获取所有评论,我发出了一个具有相同URL的GET请求,我收到了错误404。
我做错了什么?
控制器看起来很好,但从我发现的,把“/:id”到处在我的路线是一个坏的做法,但事件时,我改变它为“/:PostId”,例如,它什么也不做。

b1uwtaje

b1uwtaje1#

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

router.post注册POST请求的处理程序。
当您收到/api/comments/28的HTTP POST请求时,它将由comCtrl.createComment处理。
如果comCtrl.createComment随后调用next(第三个参数)--尽管我假设它不会调用,因为您并不想编写中间件--那么它将沿着处理程序列表传递到下一个匹配项(comCtrl.getPostComments)。
当您收到/api/comments/28的HTTP GET请求时,您没有处理程序,因为您没有调用router.get(),所以您收到一个404错误。(这应该是一个405错误,但我不同意将其归因于Express设计决策)。
如果您想处理GET请求,那么您需要编写代码,说明在收到GET请求时要做什么。

相关问题