如何在不同的函数中使用从函数获得的JSON值?(下面的解释可能会更清楚)



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

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

它进入handleRequest,它根据请求执行某些不同的任务。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((是我设置的另外两个函数。我主要想做的是再添加一个if条件,该条件具有基于handleJSON((的响应的条件,即,如果jsonResult=[somevalidvalue],则运行handleHMTL((,否则用"响应;您尚未访问/[某个链接]。

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

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

如果信息听起来太长、太长,我很抱歉。我以前没有使用过Cloudflare的worker,我一直在努力弄清楚它的作用,以及我能做什么和不能做什么。谢谢!

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

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

最新更新