Я потратил последние два дня (буквально), пытаясь запустить сервис-воркер в моем приложении NextJS, которое запускает Express в качестве сервера. Репо, где я размещаю весь код, - https://github.com/nicer00ster/nicer00ster-portfolio Я просто ищу намек, где я ошибаюсь. Причина, по которой я использую Express, - это отправка почты, и во всех примерах, где используется следующий офлайн или любая другая конфигурация сервера, используется плагин http.
Я работаю над этим портфолио около 2 месяцев, и я действительно хочу поднять свой рейтинг Lighthouse, прежде чем я решу опубликовать его вживую. Любое направление имело бы большую ценность. Спасибо!
Поэтому, если я создам сервер с использованием http вместо Express, тогда сервис-воркер будет работать. Вот репо с кодом, который я бы использовал, чтобы заставить его работать. repl.it/@nicer00ster/GrandObviousAggregator Но если я попытаюсь снова добавить Express, чтобы моя почтовая система заработала, сервис-воркер выйдет из строя.
Нет, не видел! Спасибо за ссылку. Есть предложения, с чего начать?
Вы получаете сообщение об ошибке в консоли при выходе из строя работника службы?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У меня недостаточно репутации, чтобы оставить комментарий, но ...
Ссылки repl.it, на которые вы ссылаетесь, являются репликами Javascript в собственном браузере, которые не запускают node и, по расширению, express. Вам нужно будет использовать nodeJS repl или, если хотите, использовать наш экспресс шаблон.
Я просто размещал там код, чтобы попытаться показать, что я делаю. xD
Наконец разобрался с этим, в итоге отказался от Express и просто обработал тело ответа для писем через Node:
const { headers, method, url } = req;
let body = [];
req.on('error', (err) => {
console.error(err);
}).on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
})
Затем использовал ту же функцию nodemailer sendTransport, которую я уже использовал. Сервис-воркер работает, а почта уходит! = D
Так что на этой неделе я также пытался создать проект, который, скажем, прошел «проверку маяка».
Далее есть действительно хороший каталог примеров. Конкретный пример, который помог мне настроить это, был следующий.js / примеры / с-sw-preache.
Это похоже на вашу настройку только с использованием SWPrecacheWebpackPlugin со стандартной настройкой
Кажется, что отсутствует шаг, который может быть проблемой, заключается в том, что вы не регистрируете своего сервис-воркера. В вашем индексном файле вы можете зарегистрировать работника службы в компонентеDidMount Lifecycle.
import React from 'react'
export default class extends React.PureComponent {
componentDidMount() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('/service-worker.js')
.then(registration => {
console.info('service worker registration successful')
})
.catch(err => {
console.warn('service worker registration failed', err.message)
})
}
}
render() {
return <p>Check the console for the Service Worker registration status.</p>
}
}
У меня такая же конфигурация, как у вас, и она мне подходит. Можете ли вы подробнее рассказать о проблеме, с которой столкнулись? Может показать нам ошибку здесь?