Я ищу ответ на мою проблему. Я тестирую сервисный работник из workbox с моим сервером nodeJs. Я тестировал с базовой конфигурацией, как показано ниже:
Базовый nodeJs app.js
var http = require('http');
var fs = require('fs');
var server = http.createServer(function (req, res) {
if (req.url === "/") {
fs.readFile('index.html', function (err, data) {
if (err) throw err
res.writeHead(200, {
'Content-type': 'text/html;charset=utf-8'
});
res.end(data);
});
} else if (req.url === '/sw.js') {
fs.readFile('sw.js', function (err, data) {
if (err) throw err
res.writeHead(200, {
'Content-type': 'text/javascript'
});
res.end(data);
});
}
});
server.listen(8080);
Мне удалось поместить мои файлы в кеш и заставить его работать в автономном режиме. Но проблемы начались, когда я попытался использовать модуль Express:
Express nodeJs app.js
var express = require('express');
var app = express();
app.listen(8080);
//*****************************************************************
//-------------------------- TEMPLATES --------------------------
//*****************************************************************
//moteur de modèles ou de templates
app.set('view engine', 'ejs');
//*****************************************************************
//-------------------------- MIDDLEWARE --------------------------
//*****************************************************************
app.use('/static', express.static(__dirname + '/public'));
//*****************************************************************
//--------------------------- ROUTES ------------------------------
//*****************************************************************
app.get('/', function (request, response) {
response.render('./pages/index.ejs');
});
Мне удается поместить мои файлы в кэш, но мне не удается заставить его работать в автономном режиме.
В чем причина этой разницы?
sw.js
importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js');
if (workbox) {
console.log(`Yay! Workbox is loaded ?`);
} else {
console.log(`Boo! Workbox didn't load ?`);
}
workbox.precaching.precacheAndRoute([
{ url: '/', revision: '383676' }
]);
+-node_modules
+-public
+-js
sw-register.js
sw.js
+-css
+-views
+-pages
index.ejs
server.js
EDIT
Не спрашивайте меня, почему, но проблема решилась, когда я добавил этот фрагмент кода в файл app.js, промежуточная сессия:
app.use(express.static(__dirname + '/views/pages'));
и внутри моей папки "pages" я помещаю свой файл sw.js. На самом деле, куда бы я ни положил свой файл sw.js, если он находится внутри целевого объекта папки с помощью _dirname
.