javascript - 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 参数不会暴露给路由器。你有几个选择:
- 解析
req.originalUrl
以获取用户 ID(不推荐)。req.originalUrl
不受路由器挂载点的影响,并且将保留为/user/112/profile
您访问的任何 url。 - 添加一些中间件来公开 id(推荐)。您的新路线声明最终将如下所示:
(现在你可以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
(不推荐)。
推荐阅读
- javascript - 泛化对象的模式或技术
- python-3.x - sqlite中是否有'WHERE''like'和'OR'的组合?
- android - Flutter:试图访问方法 sun.security.util.ECUtil.getECParameters(Ljava/security/Provider;)Ljava/security/AlgorithmParameters
- java - RecyclerView 的项目在屏幕上的位置在运行时发生变化
- vue.js - FlotChart setupGrid() 不更新 X 轴
- java - 线程中的signallAll方法
- python - 如何跨不同的 PPI 和屏幕分辨率扩展我的 Tkinter 程序
- typescript - 部分重叠的打字稿键
- react-native - Realm 在 android 10 的 react-native 中崩溃?
- rust - 实现 IntoIterator 以迭代内部集合时的生命周期冲突