快速中间件,对请求对象的更改不会持续

时间:2019-10-22 10:24:19

标签: express express-router

我正在尝试在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在端点中变得可用。有人看到我在做什么错吗?

2 个答案:

答案 0 :(得分:2)

在快速文档(http://expressjs.com/en/api.html#req.params)中说:

  

如果需要对req.params中的键进行更改,请使用app.param   处理程序。更改仅适用于已在中定义的参数   路线路径。

因此,您需要检查app.param处理程序。

http://expressjs.com/en/4x/api.html#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一样进行访问。