Запутался в сервис-воркере с NextJS и Express

Я потратил последние два дня (буквально), пытаясь запустить сервис-воркер в моем приложении NextJS, которое запускает Express в качестве сервера. Репо, где я размещаю весь код, - https://github.com/nicer00ster/nicer00ster-portfolio Я просто ищу намек, где я ошибаюсь. Причина, по которой я использую Express, - это отправка почты, и во всех примерах, где используется следующий офлайн или любая другая конфигурация сервера, используется плагин http.

Я работаю над этим портфолио около 2 месяцев, и я действительно хочу поднять свой рейтинг Lighthouse, прежде чем я решу опубликовать его вживую. Любое направление имело бы большую ценность. Спасибо!

У меня такая же конфигурация, как у вас, и она мне подходит. Можете ли вы подробнее рассказать о проблеме, с которой столкнулись? Может показать нам ошибку здесь?

Swapnil 08.06.2018 20:33

Поэтому, если я создам сервер с использованием http вместо Express, тогда сервис-воркер будет работать. Вот репо с кодом, который я бы использовал, чтобы заставить его работать. repl.it/@nicer00ster/GrandObviousAggregator Но если я попытаюсь снова добавить Express, чтобы моя почтовая система заработала, сервис-воркер выйдет из строя.

nicer00ster 08.06.2018 20:52

Нет, не видел! Спасибо за ссылку. Есть предложения, с чего начать?

nicer00ster 08.06.2018 21:00

Вы получаете сообщение об ошибке в консоли при выходе из строя работника службы?

Swapnil 08.06.2018 21:00
ibb.co/daqFHo Это ошибка, которую я получаю, когда пытаюсь запустить сервис-воркер с помощью Express.
nicer00ster 08.06.2018 21:26
repl.it/@nicer00ster/ThriftyJoyousDiskdrive Это мой код, когда я пытаюсь запустить экспресс
nicer00ster 08.06.2018 21:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
1 382
3

Ответы 3

У меня недостаточно репутации, чтобы оставить комментарий, но ...

Ссылки repl.it, на которые вы ссылаетесь, являются репликами Javascript в собственном браузере, которые не запускают node и, по расширению, express. Вам нужно будет использовать nodeJS repl или, если хотите, использовать наш экспресс шаблон.

Я просто размещал там код, чтобы попытаться показать, что я делаю. xD

nicer00ster 08.06.2018 21:33

Наконец разобрался с этим, в итоге отказался от 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>
  }
}

Другие вопросы по теме