0

所以我有一个非常普通的 eventListener 来监听传入的事件。

      addEventListener("fetch", event => {
               event.respondWith(handleRequest(event.request))
      })

它转到 handleRequest,它根据 request.url 执行某些不同的任务。

      async function handleRequest (request) {
          var url = new URL(request.url);
          if (url.pathname === '[some-domain-name]/[some-link]') {
              var jsonResult = handleJSON();
              return jsonResult;
          } else {
              return handleHTML();
      }

handleJSON() 和 handleHTML() 是我设置的两个附加函数。我本质上想要做的是再添加一个如果条件具有基于handleJSON()响应的条件,即如果jsonResult = [somevalidvalue]运行handleHMTL()否则响应“你还没有访问/ [一些-链接]呢。

所以总而言之,如果我们去 [some-domain-name] 它应该用句子来回应。然后,一旦我们访问 /[some-link],我们就会在 jsonResult 中获得某种值,如果我们返回 [some-domain-name],它应该会收到来自 handleHTML() 的响应。另外,如果可能的话,我想知道如何将 jsonResult 中的值传递给我们的 handleHTML() 函数。这是 jsonResult 中的结果。

           const body = JSON.stringify(links, null, 2)        
           return new Response(body, init)

如果信息听起来太长且过于冗长,我很抱歉。我以前没有使用过 Cloudflare 的 worker,我一直在试图弄清楚什么东西在哪里,我能用它做什么,不能做什么。谢谢你!

4

1 回答 1

0

您的代码意味着handleJSON()返回一个Response对象,因为您随后将其作为对原始请求的响应返回。您的问题有点不清楚,但听起来您是在说此响应包含 JSON 正文,并且您想在代码中检查该正文。因此,您可以执行以下操作:

let jsonResponse = handleJSON();
if (jsonResponse.ok) {  // check status code is 200
  let jsonValue = await jsonRespnose.json();
  if (jsonValue.someFlag) {
    return handleHTML();
  }
}

请注意,调用jsonResponse.json()会消耗响应正文。因此,在此之后您将无法再返回响应。如果您决定最终将 JSON 响应返回给客户端,则需要重新构建它,例如:

jsonResponse = new Respnose(JSON.stringify(jsonValue), jsonResponse);

这将重新创建响应正文,同时从原始响应中复制状态和标头。

于 2020-10-21T16:39:30.070 回答