0

我在快速路由器中访问请求参数时遇到了一些问题。

我的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;
4

1 回答 1

2

URL 参数不会暴露给路由器。你有几个选择:

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

(现在你可以req.userId在你的profile.js

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(不推荐)。
于 2020-03-27T13:39:11.143 回答