Cloudflare Worker基于路由规则拦截url中参数

今天工作遇到这样一个场景:

由于某种原因,某些接口不想做更改,又想弃用某些参数,让这些参数不再入库查询,直接返回指定响应,通过Cloudflare的 Worker可实现。例如对业务域名的type参数做拦截,如果 type参数等于unicon_sass,就返回403状态码,并返回json字符串。如下:

addEventListener('fetch', event => {
  const data = {
  "code": 11111,
  "message": "为了给您提供更好的体验,该服务近期正在升级中."
};
  const $URL  = new URL(event.request.url);
  const type = $URL.searchParams.get("type")  
  const json = JSON.stringify(data, null, 2);
  if (type==="union_saas"){
    return event.respondWith(
      new Response(json, {
        status: 403,
          headers: {
            'content-type': 'application/json;charset=UTF-8',
         },
      })
    );
  };
});

之后配置好url的路由规则进入这里做逻辑处理就好。

OK_DONE

如果只是想拦截某个接口,并响应指定内容或者json数据,可以使用如下方法:

addEventListener('fetch', event => {
  const data = {
  "code": 1111,
  "message": "为了给您提供更好的体验,该服务近期正在升级中."
};
  const json = JSON.stringify(data, null, 2);
  return event.respondWith(
    new Response(json, {
    status: 403,
      headers: {
        'content-type': 'application/json;charset=UTF-8',
      },
    })
  );
});

如果只是想拦截某个header 里的key,并判断value值,如下即可:

addEventListener('fetch', event => {
const data = {
  "code": 1111,
  "message": "为了给您提供更好的体验,该服务近期正在升级中."
};
const Cookie = new Map(event.request.headers).get("cookie")
const json = JSON.stringify(data, null, 2);
if (Cookie==="abcd"){
    return event.respondWith(
      new Response(json, {
        status: 200,
          headers: {
            'content-type': 'application/json;charset=UTF-8',
        },
      })
    );
   };
});