【问题标题】:How to preserve request queries with fastify-http-proxy while adding an api-key query parameter in a proxy如何在代理中添加 api-key 查询参数时使用 fastify-http-proxy 保留请求查询
【发布时间】:2021-05-13 14:05:04
【问题描述】:

我有一个带有 node.js + fastify 服务器的小项目,我想在其中使用 fastify-http-proxy https://github.com/fastify/fastify-http-proxy 将请求代理到外部 API(此处没有现有标签) .此外部 API 希望将其 api-key 指定为查询参数。我想将此密钥添加到我的服务器中的代理请求,而不是我们的前端。但是我似乎无法让它与 replyOptions.queryString 一起工作,因为它没有直接访问 request.query 的权限,它会覆盖原始请求查询,从而使整个调用变得无用:

    let originalRequestQueries = {};
    
    fastify.register(proxy, {
      upstream: CONFIG.externalApi,
      prefix: '/api/stocks',
      undici: true,
      replyOptions: {
        queryString: {
          ...originalRequestQueries,
          apikey: CONFIG.apiKey,
        },
      },
      preHandler: async (req, reply) => {
        try {
          await req.jwtVerify();
          originalRequestQueries = req.query;
          console.log(originalRequestQueries);
        } catch (err) {
          throw boom.boomify(err);
        }
      },
    });

关于如何完成这项工作的任何提示?我似乎无法在 fastify-http-proxy 文档和 fastify-reply-from 的任何地方找到相关信息。 如果我在进入服务器的请求中指定 apikey 查询参数,则代理工作得很好。 亲切的问候, 乙

【问题讨论】:

    标签: node.js api fastify


    【解决方案1】:

    我通过添加让它工作

    req.raw.url = `${req.raw.url}&apikey=${CONFIG.apiKey}`;
    

    进入 preHandler 函数。奇怪的是,这有效,但对 req.query 没有任何更改。

    【讨论】:

    • 很高兴你发现了它——但它相当难看。您可能想在他们的 github 项目上提出问题 ;)
    • 哈哈,这对我们的用例来说会很好,我会在完成这个项目后检查我可以在开源上做些什么 :) 感谢你看一下它,伙计。干杯
    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 2020-05-11
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多