2015-04-18 10 views
5

mam następujący błąd, gdy próbuję zarejestrować pracownika usług w podstawowej aplikacji obsługiwanych przez węzeł Server Express V4/Chrome 42:Pracownik serwisu Rejestracja nie powiodła się z localhost

DOMException: Nie można zarejestrować ServiceWorker: Podczas pobierania skryptu otrzymano błędną odpowiedź HTTP kod (404). {message: "Nie udało się zarejestrować usługi ServiceWorker: otrzymano zły kod resres HTTP (404) po pobraniu skryptu przez .", name: "NetworkError", kod: 19, INDEX_SIZE_ERR: 1, DOMSTRING_SIZE_ERR: 2 ...} Kod: 19 komunikat: „nie udało się

Oto kod rejestr:

if ('serviceWorker' in navigator){ 
    console.log("SW present !!! "); 

    navigator.serviceWorker.register('worker.js', { 
     //scope: '/toto/' 
    }).then(function(registration){ 
     console.log('Service worker registered : ', registration.scope); 
    }) 
    .catch(function(err){ 
     console.log("Service worker registration failed : ", err); 
    }); 

    } 
+0

Zobacz na http://www.serviceworker.org/ – benek

Odpowiedz

9

myślę próbujesz Zarejestruj nieistniejące skrypt W tym przypadku kwestia ta pochodzi Proszę sprawdzić swój skrypt.. ścieżka i ścieżka zasięgu Może nie masz żadnego pliku "worker.js" w katalogu, w którym znajduje się ten skrypt. Jeśli tak jest, proszę podać pełną ścieżkę lub dostarczyć e worker.js w tym samym katalogu.

+0

Dziękujemy za odpowiedź. Nie widzę w dokumentacji żadnego opisu pliku conf js. Czy masz referencje? – benek

+1

Nie otrzymuję pliku conf js. Powinieneś używać poprawnego skryptuURL w funkcji rejestru, jak wyjaśniono w https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register – Paritosh

0

Też miałem ten błąd podczas korzystania z serwera ekspresowego. Okazuje się, że problem polegał na samej konfiguracji serwera, a nie na kodzie rejestracji pracownika serwisowego. Powiedziałem mojej wyraźnej aplikację aby index.html jako root, używając:

app.get('/', function(req, res) { 
    res.sendFile(path.join(__dirname + '/index.html')); 
}); 

Jednak nie powiedział wyrazić lokalizacji innych plików Chciałem, aby móc użyć. Na tym etapie moja jedyna inny plik był plik pracownik usługa, która siedziała w katalogu głównym, więc problem został rozwiązany przez dodanie tej linii do pliku serwera:

app.use(express.static(__dirname + '/')); 

do debugowania, czy problem jest z sam serwer można pobrać Web Server for Chrome i wskazać go w katalogu głównym aplikacji. Sprawdź, czy serwer jest uruchomiony i kliknij adres URL serwera WWW. Jeśli rejestracja pracownika serwisu zakończy się powodzeniem, będzie to oznaczać problem z konfiguracją serwera ekspresowego, a nie z kodem rejestracji pracownika serwisowego.