web-dev-qa-db-fra.com

L'enregistrement du technicien de service a échoué avec localhost

L'erreur suivante survient lorsque j'essaie d'inscrire un technicien de service dans une application de base servie par un nœud serveur Express V4/sur Chrome 42:

DOMException: impossible d'enregistrer un ServiceWorker: un code de réponse HTTP incorrect (404) a été reçu lors de l'extraction du script. {message: "Echec de l'enregistrement de dans ServiceWorker: un mauvais code HTTP res… (404) a été reçu lorsque a récupéré le script.", nom: "NetworkError", code: 19, INDEX_SIZE_ERR: 1, DOMSTRING_SIZE_ERR: 2…} code: 19 message: "Echec de

Voici le code du registre:

    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);
    });

  }
7
benek

Je pense que vous essayez d'enregistrer un script inexistant. Dans ce cas, ce problème vient. Veuillez vérifier votre chemin de script et votre chemin de portée. Peut-être que vous n'avez pas de 'worker.js' dans le répertoire où ce script existe. Si tel est le cas, indiquez le chemin complet ou indiquez worker.js dans le même répertoire.

9
Paritosh

J'ai également eu cette erreur lors de l'utilisation d'un serveur express. Il s’avère que le problème vient de la configuration du serveur elle-même, et non du code d’enregistrement du prestataire de services. J'avais dit à mon application express de prendre index.html comme racine par défaut en utilisant:

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

Cependant, je n'avais pas indiqué l'emplacement de tous les autres fichiers que je voulais pouvoir utiliser. A ce stade, mon seul autre fichier était le fichier de l'agent de service qui se trouvait à la racine du répertoire. J'ai donc résolu le problème en ajoutant cette ligne au fichier du serveur:

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

Pour déterminer si votre problème concerne le serveur lui-même, vous pouvez télécharger Web Server for Chrome et le diriger vers le répertoire racine de votre application. Vérifiez que le serveur est démarré et cliquez sur l'URL du serveur Web. Si votre enregistrement de technicien de service réussit maintenant, vous saurez que c'est un problème de configuration de votre serveur express et non de votre code d'enregistrement de technicien de service.

0
Natstar