给定来自我的nodejs服务器的以下代码片段:
 router.get('/page/:id', async function (req, res, next) {
 var id = req.params.id;
 if ( typeof req.params.id === "number"){id = parseInt(id);}
 res.render('page.ejs' , { vara:a , varb:b });
 });我想要做我在nodejs服务器中正在做的事情,但是要从服务工作者开始。我已经使用workbox生成并构建了它,但我不知道如何缓存所有的urls,如/page/1或/page/2或..../page/4353等,而不会对服务工作者源代码收费过高。
上面的nodejs代码100%正常工作。我试着这样做:
.....{
"url": "/page/\*",
"revision": "q8j4t1d072f2g6l5unc0q6c0r7vgs5w0"
},....当我将这些代码添加到正在安装的service worker中重新加载网站时,它在service worker预缓存中不起作用,并且花费了相当多的时间。这正常吗?难道我不能在不对整个安装过程和浏览器缓存收费过高的情况下做到这一点吗?
感谢您的帮助!
编辑:
我的服务工作者看起来像这样:
 importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.6.2/workbox-sw.js");
 if (workbox) {
   console.log('Workbox status : ONLINE');
 } else {
   console.log('Workbox status : OFFLINE');
 }
 workbox.skipWaiting();
 workbox.clientsClaim();
 self.__precacheManifest = [
   {
     "url": "/",
     "revision": "7e50eec344ce4d01730894ef1d637d4d"
   },
   'head.ejs',
   'navbar.ejs',
   'map_script.ejs',
   'scripts.ejs',
   'details.json',
   'page.ejs',
   'home.ejs',
   'map.ejs',
   'about.ejs',
   {
     "url": "/page",
     "revision": "881d8ca1f2aacfc1617c09e3cf7364f0",
     "cleanUrls": "true"
   },
   {
     "url": "/about",
     "revision": "11d729194a0669e3bbc938351eba5d00"
   },
   {
     "url": "/map",
     "revision": "c3942a2a8ac5b713d63c53616676974a"
   },
   {
     "url": "/getJson",
     "revision": "15c88be34ben24a683f7be97fd8abc4e"
   },
   {
     "url": "/getJson1",
     "revision": "15c88be34bek24a6l3f7be97fd3aoc4e"
   },
   {
     "url": "/getJson2",
     "revision": "15c82be34ben24a683f7be17fd3amc4e"
   },
   {
     "url": "/getJson3",
     "revision": "15c62be94ben24a683f7be17gd3amc4r"
   },
   {
     "url": "/getJson4",
     "revision": "15c62beh4ben24a6g3f7be97gd3amc4p"
   },
   {
     "url": "/public/_processed_/2/7/csm.jpg",
     "revision": "15c62beh4bek44a6g3f7ben7gd3amc4p"
   },
   {
     "url": "/public/_processed_/2/7/csm.jpg",
     "revision": "15c62beh4ben24a6g3f7be9ngd3a2c4p"
   }
 ].concat(self.__precacheManifest || []);
 workbox.precaching.suppressWarnings();
 workbox.precaching.precacheAndRoute(self.__precacheManifest, {});发布于 2021-11-02 15:38:49
我认为您的问题可能是您期望根据清单获得干净的urls,但实际上您期望的是具有不同参数的动态urls。为此,我怀疑您可能想要使用regex。
缓存google字体的一个示例:
workbox.routing.registerRoute(
  /^https:\/\/fonts\.googleapis\.com/,
  workbox.strategies.staleWhileRevalidate({
    cacheName: 'google-fonts-stylesheets'
  })
);也许可以尝试一些更接近的方法(regex可能需要一些爱,我没有验证):
workbox.routing.registerRoute(
  /\/page\/*/,
  workbox.strategies.staleWhileRevalidate({
    cacheName: 'pages'
  })
);编辑:我知道我的答案和@voiceuideveloper是一样的,但我相信这是正确的答案。我在我当前的应用中做到了这一点,它工作得很好。
https://stackoverflow.com/questions/52727570
复制相似问题