我正在尝试在Express中实现一些中间件,所有路由都应调用该中间件。该中间件应更改请求对象。
我已经尝试了几种方法,但是似乎仍然遇到相同的问题。离开中间件后不久,请求对象看起来就变回了原始状态。
当前我的代码类似于(我通过一个简单的示例对其进行了简化):
route.js:
const express = require('express');
const router = express.Router();
router.get('/getMe', (req, res) => {
// return the desired data.
// I expect req.params.myString to exist here but it does not.
});
module.exports = router;
index.js:
const express = require('express');
const router = express.Router();
router.use('/', require('./route'));
module.exports = router;
app.js:
const express = require('express');
const app = express();
const routes = require('./index');
app.use((req, res, next) => {
// Adding req.params.myString to the request object.
if (req.params.myString === undefined) req.params.myString = 'hello world';
next();
});
app.use('/api', routes);
如您所见,我省略了一些代码以使其更具可读性。这是获取响应并设置服务器的代码。
同样,我希望req.params.myString在端点中变得可用。有人看到我在做什么错吗?
答案 0 :(得分:2)
在快速文档(http://expressjs.com/en/api.html#req.params)中说:
如果需要对req.params中的键进行更改,请使用app.param 处理程序。更改仅适用于已在中定义的参数 路线路径。
因此,您需要检查app.param处理程序。
答案 1 :(得分:1)
您应该app.set("myString", "hello World")
位于app.js中,然后可以使用req.app.get("myString")
访问route.js / index.js脚本中的字段。或也应该这样做,将其设置为app.myString = "Hello world"
,然后像访问req.app.myString
一样进行访问。