title: Service Workers
slug: service-workers
Register Service Workers
if {
undefined !== window &&
window.navigator.serviceWorker
.register("./sw.js", { scope: "." })
.then((reg) => {
// registration worked
console.log("Registration succeeded. Scope is " + reg.scope);
})
.catch((error) => {
// registration failed
console.log("Registration failed with " + error);
});
}
Log requests with service worker
self.addEventListener("install", function (event) {
console.log("Sevice worker installed");
});
self.addEventListener("fetch", (event) => {
console.log(event.request.method, event.request.url);
event.respondWith(fetch(event.request));
});
Proxy Specific Requests With Service Workers
self.addEventListener("fetch", (event) => {
const { url, method } = event.request;
//Does the URL match? But only for get
if (url.includes("/api/whatever") && 'GET' === method ) {
event.respondWith(
new Response(
//JSON encoded object
//Could be string,blob,redirect,etc
JSON.stringify({
hi: 'Roy'
}),
{
//Set additional headers
headers: {
//Send JSON content type headers
"Content-Type": "text/json"
},
}
)
);
} else {
//No match? Send to network
event.respondWith(fetch(event.request));
}
});