Как мне получить идентификатор параметров этой записи в этом пути маршрута?

#node.js #reactjs #mongodb #express

Вопрос:

Возможно ли это? Я все еще учусь в этом путешествии. Итак, я пытаюсь выяснить, возможно ли это получить. Я создаю блог, используя node.js, mongodb, мангуст и expressjs. У меня есть такой маршрут, как этот:

  const router = require("express").Router()
 const Comment = require("../models/Comment")
 const Post = require("../models/Post");
  router.delete("/posts/:id/comment/:id", async (req, res) =>{
    
 
 }
 

Итак, в принципе, мы хотим создать комментарий по этому пути и под идентификатором этого сообщения.

Итак, могу ли я получить идентификатор поста? Я имею в виду, могу ли я получить идентификатор поста, на котором сделан этот комментарий? Я могу получить идентификатор параметров комментария, но я не знаю, как получить сообщения/идентификатор. Я сделал что-то вроде этого:

 const post = Post.findById(req.params.id) this didnt get the post.

const comment = Comment.findbyId(req.params.id) this found the comment id. 
 

Если это возможно, пожалуйста, скажите мне, как это сделать. Если это невозможно, любезно предоставьте мне альтернативный способ сделать это. Спасибо.

Ответ №1:

Проблема в том, что вы используете одно и то же имя для обоих параметров маршрута ( :id ), поэтому экспресс-маршрутизатор не может отличить, хотите ли вы опубликовать :id или прокомментировать :id . Переименуйте /posts/:id/comment/:id во что-то вроде /posts/:postID/comment/:commentID , и тогда оба параметра будут доступны в вашем коде как req.params.postID и req.params.commentID .

Комментарии:

1. Большое спасибо. Это решило мою проблему.

Ответ №2:

Вы используете id как идентификатор записи, так и идентификатор комментария. req.params вы получите только последнее id , чего, вероятно, вы не хотите. Вместо этого вы могли бы семантически дифференцировать эти идентификаторы и использовать для них более четкие имена. Например:

 router.delete("/posts/:post_id/comment/:comment_id", async (req, res) =>{
   //your code
}
 

Комментарии:

1. опереди меня в этом 😀

2. 😀 в считанные секунды