在快速路由器中访问请求参数时遇到麻烦。
我的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;
答案 0 :(得分:2)
URL参数不向路由器公开。您在这里有几个选择:
req.originalUrl
以获取用户ID(不推荐)。 req.originalUrl
不受路由器安装点的影响,将保留为/user/112/profile
或您访问的任何URL。(现在您可以在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
(不推荐)。