使 JS API: array.includes(key) 没有按预期工作

Making an JS API: array.includes(key) not working as expected

我为 Cloudflare 工作人员编写了这段代码。

当在 Stripe 上创建新客户时,会触发 webhook 并将新客户数据 return 发送到 [...].worker.dev/updateCustomers Cloudflare 工作人员然后将执行以下操作:

  1. 从客户JSON对象中获取名称
  2. 创建一个字符串周围没有“”的版本
  3. 将新客户添加到名为 customers[] 的数组中
  4. 出于调试原因,它将使用以下内容响应 Stripe:新客户名称、数组中的所有客户以及如果新客户名称包含在数组中的结果

如果用户打开到“https://[...]workers.dev/validate?licence=eee”的连接,如果名称在客户数组,如果不是则“失败”。

通过 Stripe,当 webhook 被触发时,我可以看到我的工作人员的以下响应:“客户收到:eee 其他客户:demo、demo2、demo3、eee customers.includes(key):true”

这意味着新客户已成功添加到数组中,并且我的代码能够检查客户是否包含在数组中。

但是当用户尝试直接验证他们的名字时,只有在开头定义的数组内容,如“demo”、“demo2”得到肯定的响应。

谁能帮我解决这个问题?非常感谢。

addEventListener("fetch", (event) => {
  event.respondWith(
    handleRequest(event.request).catch(
      (err) => new Response(err.stack, { status: 500 })
    )
  );
});

customers = ["demo", "demo2","demo3"];

/**
 * @param {Request} request
 * @returns {Promise<Response>}
 */
async function handleRequest(request) {
  const { pathname } = new URL(request.url);

  if (pathname.startsWith("/api")) {
    return new Response(JSON.stringify({ pathname }), {
      headers: { "Content-Type": "application/json" },
    });
  }

  if (pathname.startsWith("/validate")) {

    let params = (new URL(request.url)).searchParams;
    let key = params.get('licence');
    console.log(key);


    if(customers.includes(key)){
      return new Response("legit");
    }
    else {
      return new Response("failed");
    }

  }

  if (pathname.startsWith("/updateCustomers")) {
    let clonedBody = await request.clone().json();
    let newCustomerName = JSON.stringify(clonedBody.data.object.name);
    let newCustomerNameRaw = newCustomerName.substring(1, newCustomerName.length-1);

    customers.push(newCustomerNameRaw);

    return new Response("Customers recievedd: " + newCustomerNameRaw + " Other Customers: " + customers.toString() + " customers.includes(key): " + customers.includes(newCustomerNameRaw) );
  }

  //fallback **strong text**not relevant
  if (pathname.startsWith("/status")) {
  const httpStatusCode = Number(pathname.split("/")[2]);

  return Number.isInteger(httpStatusCode)
    ? fetch("https://http.cat/" + httpStatusCode)
    : new Response("That's not a valid HTTP status code.");
  }

  return fetch("https://welcome.developers.workers.dev");
}

那是因为客户“demo”、“demo2”和“demo3”作为代码的一部分存储在 webworker 中,所以调用时它们随时都在。代码运行时,新客户只是暂时存储在数组中,但一旦执行结束,客户数组内容就会重置。如果你想在运行之间保留新客户,你将需要使用某种后端来存储客户