微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不同的函数中使用从函数获得的JSON值? 以下说明可能会更清楚

如何解决如何在不同的函数中使用从函数获得的JSON值? 以下说明可能会更清楚

所以我有一个非常普通的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-链接]。

因此,总而言之,如果我们转到[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的工作人员,而且我一直在尝试弄清该去哪儿以及我可以做什么和不能做什么的小事情。谢谢!

解决方法

您的代码意味着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);

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。