Estoy tratando de agregar un parámetro al cuerpo de una solicitud POST en un trabajador de servicio, pero se envía el cuerpo original. Yo uso el siguiente código
let token = ''; self.addEventListener('message', function (event) { if (event.data && event.data.type === 'SET_TOKEN') { token = event.data.token; } }); self.addEventListener('fetch', function (event) { const destURL = new URL(event.request.url); const headers = new Headers(event.request.headers); if (token) headers.append('Authorization', token); if (destURL.pathname === '/logout/') { const promiseChain = event.request.json().then((originalBody) => { return fetch(event.request.url, { method: event.request.method, headers, // this body is not send to the server but only the original body body: JSON.stringify(Object.assign(originalBody, { token })), }); }); event.respondWith(promiseChain); return; } const authReq = new Request(event.request, { headers, mode: 'cors', }); event.respondWith(fetch(authReq)); });En términos generales, eso debería funcionar. Aquí hay un ejemplo en vivo muy similar que puede ejecutar y confirmar:
https://glitch.com/edit/#!/materialistic-meadow-rowboat?path=sw.js%3A18%3A7
Simplemente POST en https://httpbin.org/#/Anything/post_anything , que a su vez devolverá el cuerpo y los encabezados de la solicitud.
Si su código no funciona, sugeriría usar esa muestra básica como punto de partida y ralentizar la personalización con su propia lógica. Además, sería una buena idea confirmar que su trabajador de servicio tiene el control adecuado de la página del cliente cuando realiza esa solicitud. Con la interfaz de depuración de Chrome DevTool, debería poder colocar puntos de interrupción en el controlador de eventos de fetch de su trabajador de servicio y confirmar que todo funciona como se esperaba.
Dando un paso atrás, debe asegurarse de que su aplicación web no esté codificada de tal manera que requiera que el trabajador del servicio tenga el control para hacer cosas como expirar los tokens de autenticación. Está bien tener una lógica especial en el trabajador del servicio para dar cuenta de la autenticación, pero asegúrese de que las rutas de su código funcionen de manera similar cuando el trabajador del servicio no intercepte las solicitudes, como podría ser el caso cuando un usuario recarga a la fuerza una página web manteniendo presionado la tecla Mayús.