今天工作遇到这样一个场景:
由于某种原因,某些接口不想做更改,又想弃用某些参数,让这些参数不再入库查询,直接返回指定响应,通过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',
},
})
);
};
});