Я получил сообщение об ошибке: не удалось зарегистрировать ServiceWorker: при получении сценария получен неверный код ответа HTTP (404) - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь зарегистрировать работника сервиса на html-странице и получаю ошибку из заголовка.Я работаю над Linux, я имею право писать, удалять, изменять и так далее, (я на #).Я нахожусь на пути, как:

/var/www/a/b/c/d/e/f/project

И здесь у меня есть сервер node.js (index.js), HTML-страница (index.html) и работник службы (ServiceWorker.js)

Сервер node.js выглядит следующим образом:

const https = require('https');
const fs = require('fs');
var path = require('path');
const express = require('express');
const app = express();
const router = express.Router();
const pool = require('./mysqldb.js');
const pathView = __dirname + "/views/";
const IMGPath = "/public";
var bodyParser = require("body-parser");
const listenPort = 8010;

// Process application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));

// Process application/json
app.use(bodyParser.json());

app.set('view engine', 'ejs');

app.use(express.static('public'));
app.use('/public', express.static('public'));

// This route will be used to print the type of HTTP request the particular 
Route is referring to
router.use(function (req, res, next) {
next();
});

app.engine('html', require('ejs').renderFile);

app.get('/index.html',function(req,res){    
 res.render('/var/www/a/b/c/d/e/f/project/index.html');
});
app.use( "/", router);

// Not found
app.use("*",function(req,res){
res.setHeader('Content-Type', 'text/html');
res.status(404).send('Page introuvable !');
});

// Run server
app.listen(listenPort, function () {
console.log( listenPort )
});

//HTTPS
https.createServer(options, app).listen(8000);

И файл .html выглядит следующим образом:

<html>
<body>
<script>

if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('ServiceWorker.js', {
    scope: './'
 }).then(function (registration) {
    var serviceWorker;
    if (registration.installing) {
        serviceWorker = registration.installing;
        document.querySelector('#kind').textContent = 'installing';
    } else if (registration.waiting) {
        serviceWorker = registration.waiting;
        document.querySelector('#kind').textContent = 'waiting';
    } else if (registration.active) {
        serviceWorker = registration.active;
        document.querySelector('#kind').textContent = 'active';
    }
    if (serviceWorker) {
        // logState(serviceWorker.state);
        serviceWorker.addEventListener('statechange', function (e) {
            // logState(e.target.state);
        });
    }
}).catch (function (error) {
    // Something went wrong during registration. The service-worker.js file
    // might be unavailable or contain a syntax error.
    console.log('Service Worker registration error : ' , error);
});
} else {
    console.log('Please update your brower!');
// The current browser doesn't support service workers.
}

</script>

</body>
</html>

Я запускаю узел index.js (команда: "node index.js ") Все хорошо, страница загружается (я имею в виду скрипт со страницы), и я получаю следующую ошибку:

Service Worker registration error :  TypeError: Failed to register a ServiceWorker: A bad HTTP response code (404) was received when fetching the script.

И я не знаю, что делать.в основном файлы ServiceWorker.js, index.html и index.js находятся в одной и той же папке. Я пытаюсь запустить их, но каким-то образом путь неправильный ... Может кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 02 октября 2018

Включите это в ваш app.js и поместите работника службы в ваш публичный каталог / папку.

app.get("/ServiceWorker.js", (req, res) => {
  res.sendFile(path.resolve(__dirname, "public", "ServiceWorker.js"));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...