所以我有一个非常普通的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);
这将重新创建响应主体,同时从原始响应复制状态和标头。