【问题标题】:Modify or save data in request object in fastify在 fastify 中修改或保存请求对象中的数据
【发布时间】:2019-06-22 19:50:25
【问题描述】:

我使用nestjs 来构建一个REST API。

我有一个从 redis 缓存加载数据的中间件,应该将其保存在请求对象中以便在控制器函数中访问它。

如果我使用 express 作为引擎,它可以工作,但使用 fastify 它就不能工作。数据在控制器函数中未定义。

代码如下:

function mymiddleware(req, res, next) => {
    req.data = {...};
    next();
};

【问题讨论】:

  • 可能不是您想听到的,但我能够在一个全新的脚手架 Nest 应用程序中重现此问题,并使用最基本的中间件。 Fastify 适配器目前似乎存在许多问题,所以我想知道此时它是否还没有准备好生产。我会在 Github 上为此打开一个问题,因为它似乎对我显示停止功能
  • 你如何注册那个中间件?
  • 我注册了中间件,它在nestjs docs中是如何描述的。
  • @Jesse 你能发布一个指向你的问题的链接吗?

标签: javascript node.js typescript express nestjs


【解决方案1】:

这是一个简单的工作示例:

const fastify = require('fastify')({ logger: true })

fastify.use(function (req, res, next) {
  console.log('middy')
  req.data = { hello: 'world' }
  next();
})

fastify.get('/', (req, res) => {
  res.send(`hello ${req.raw.data.hello}`)
})

fastify.listen(3000)

我认为您的问题是由于 req 对象:在中间件中(使用 .use 注册,您将获得标准的 Node.js 请求,而不是 fastify 处理程序中的增强 HTTPRequest。

因此,您可以使用.raw 字段访问低级 Http 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多