快速路由器中的请求参数

时间:2020-03-27 12:58:03

标签: javascript express express-router

在快速路由器中访问请求参数时遇到麻烦。

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

1 个答案:

答案 0 :(得分: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(不推荐)。