Fastify:避免在每个路由中编写样板处理程序

Fastify: avoiding writing boiler plate handler in every routes

Fastify 中是否有可能避免总是编写类似的处理程序?

我的处理程序看起来像(一种代理):

handler: async (request, reply) => {           
      reply.from(proxyMap[request.url]);
      return reply;
}

其中 proxyMap 只是我的代理路由到 target/upstream 路由路径的映射。然而处理程序总是相同的。

说个例子proxyMap内容可以是:

  const proxyMap = {
      "/api/path1/proxy1" : "/api/backend/api1",
      "/api/path2/proxy2" : "/api/backend/api2",
          ....
  };

我怎样才能移动到某个常见的处理程序(比如在某个生命周期挂钩或某个适当的地方),这样我就不需要编写每条路由。像我写路由的时候,会根据proxyMap查找执行

在 fastify 中有没有办法实现这一点?

您可以通过一些编码使其自动化:

async function handler(request, reply) {
  reply.from(proxyMap[request.url])
  return reply
}

const proxyMap = {
  '/api/path1/proxy1': '/api/backend/api1',
  '/api/path2/proxy2': '/api/backend/api2',
}

Object.keys(proxyMap).forEach((url) => {
  fastify.get(url, { handler })
})