Express路由器中的请求参数

Request parameter in Express router

我在访问 Express 路由器中的请求参数时遇到一些问题。

我的 server.js 文件有这个:

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

这是我的 ./routes/profile.js 文件:

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

但是控制台日志打印 undefined。 我是新手,感觉我缺少一些关于路由工作原理的基本知识。 有人可以帮我吗?

这是我的全部 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;

URL 参数不会暴露给路由器。您在这里有几个选择:

  1. 解析req.originalUrl获取用户id(不推荐)。 req.originalUrl 不受路由器挂载点的影响,将保持 /user/112/profile 或您访问过的任何 url。
  2. 添加一些中间件来暴露id(推荐)。您的新路线声明最终将如下所示:

(现在您可以在 profile.js 中使用 req.userId

app.use('/user/:id/profile', function(req, res, next) {
    req.userId = req.params.id;
    next();
}, require('./routes/profile'));
  1. 将挂载点从 /user/:id/profile 更改为 /user,然后编辑您的路由器以监听 /:id/profile(不推荐)。