代码之家  ›  专栏  ›  技术社区  ›  Foobar

如何在Fastify中为请求附加“项目”密钥?

  •  0
  • Foobar  · 技术社区  · 9 月前

    我正在想办法把 project 使用中间件将对象添加到请求中+使用Typescript正确键入它。以下是一个示例:

    const MOUNT = { prefix: "/project/:pid/job/" }
    
    const attachProjectMiddleware = async (req: FastifyRequest, reply: FastifyReply, done: () => void): Promise<void> => {
      //@ts-ignore
      req.project = await getProject(req.params.pid as string)
      done()
    }
    app.addHook("preHandler", attachProjectMiddleware)
    

    我需要弄清楚的两件事是:

    1. 这是向请求添加内容的正确方式吗?
    2. 如何正确地将Typescript类型添加到以下代码中,以便Typescript理解 req.project 是否有效?

    在我的处理程序中:

      app.post<ProjectIdRoute>(`/do_important_thing/start`, async (req, reply) => {
        // need this to typecheck
        req.project
    }
    

    哪里 ProjectIdRoute 看起来是这样的:

    export interface ProjectIdRoute {
      Params: {
        pid: string
      }
    }
    
    0 回复  |  直到 9 月前