Обработка различных маршрутов, которые начинаются одинаково в NodeJS, Express - PullRequest
0 голосов
/ 03 марта 2020

Я создаю API, у которого есть Статьи и Комментарии, принадлежащие этим статьям.

const articleRoutes = require('./api/routes/articles');
const commentRoutes = require('./api/routes/comments');

, затем

app.use('/articles', articleRoutes);
app.use('/comments', commentRoutes);

Все, что начинается с "article /", будет перенаправлено на articleRoutes, и все, что начинается с "comments /", пересылается на commentRoutes. GET-запросы комментариев имеют вид

/comments?article=ID_OF_ARTICLE

Как и все, все работает отлично.

Однако я хочу реструктурировать маршрут комментариев так, чтобы он был похож на

/articles/ID_OF_ARTICLE/comments

Однако теперь они оба начинаются с "/ article"

Как бы я справился с этим?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Подход originalUrl, похоже, тоже работает, но я пошел с решением здесь

Видимо, я могу сделать

app.use('/articles/:articleId/comments', function(req, res, next) {
    req.articleId = req.params.articleId;
    next();
}, commentRoutes);

и в commentRoutes

// in commentRoutes
router.get('/', (req, res, next) => {
    let articleId = req.articleId
})

Таким образом, я могу прикрепить требуемый параметр к запросу как отдельную запись и получить к нему прямой доступ

1 голос
/ 03 марта 2020

Я бы попробовал следующее:

app.use('/articles/:id/comments', commentRoutes);
app.use('/articles', articleRoutes);

Так что я думаю, что порядок важен в вышеприведенном.

// inside commentRoutes
Router.get('/', (req, res) => {
  let articlesId = req.originalUrl.split('/')[2]
})

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...