Параметр запроса в Express роутере - PullRequest
0 голосов
/ 27 марта 2020

У меня проблемы с доступом к параметрам запроса в express маршрутизаторе.

Мой server.js файл имеет следующее:

app.use('/user/:id/profile', require('./routes/profile');

И это в моем ./routes/profile.js файле :

router.get('/', (req, res) => {
    console.log(req.params.id);
}

Но журнал консоли печатает undefined. Я новичок в express и чувствую, что мне чего-то не хватает по основам c, как работает маршрутизация Может кто-нибудь помочь мне?

Вот мой полный server.js:

const express = require('express');
const app = express();
app.use(express.json());

app.use('/user/:id/profile', require('./routes/profile'));

app.listen(5000, () => console.log('Listening'));

Вот мой полный profile.js:

const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
  console.log(req.params.id);
  res.status(200).send('In profile route');
});

module.exports = router;

1 Ответ

2 голосов
/ 27 марта 2020

Параметры URL не доступны для маршрутизаторов. У вас есть несколько вариантов здесь:

  1. Parse req.originalUrl, чтобы получить идентификатор пользователя (не рекомендуется). req.originalUrl не зависит от точки монтирования маршрутизатора и останется /user/112/profile или любым другим URL-адресом, который вы посетили.
  2. Добавьте промежуточное ПО для предоставления идентификатора (рекомендуется). Ваш новый оператор маршрута будет выглядеть так:

(теперь вы можете использовать req.userId в вашем profile.js)

app.use('/user/:id/profile', function(req, res, next) {
    req.userId = req.params.id;
    next();
}, require('./routes/profile'));
Измените точку монтирования с /user/:id/profile на /user, затем отредактируйте маршрутизатор для прослушивания /:id/profile (не рекомендуется).
...