javascript - TypeError: 无法注册 ServiceWorker: 获取脚本时收到错误的 HTTP 响应代码 (404)
问题描述
我正在尝试向网站添加服务人员。我将 Node.js 与 Express.js、Vue.js 和 EJS 一起使用。^
我的节点服务器(index.js)看起来像:
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const router = express.Router();
const pool = require('./mysqldb.js');
const pathView = __dirname + "/views/";
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'));
router.use(function (req, res, next) {
next();
});
// home
router.get('/', function (req, res) {
res.render( 'home.ejs', { msg:" > " });
});
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('Example app listening on port ' + listenPort )
});
home.ejs 文件看起来像:
<!DOCTYPE html>
<html lang="en">
<body>
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('ServiceWorker.js').then(function(registration) {
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}).catch(function(err) {
//registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
}else {
console.log('No service-worker on this browser');}
</script>
</body>
</html>
我不得不提到我正在 https 上对其进行测试。我不认为 ServiceWorker.js 的内容很重要,但是如果您需要它来帮助我,我也可以发布它。服务器文件方案如下所示:
index.js
mysqldb.js
public //(folder)
views /*(folder)*/ : home.ejs , ServiceWorker.js
当我在 https 上打开网站时,我在 Web 控制台中收到以下错误:
ServiceWorker registration failed: TypeError: Failed to register a ServiceWorker: A bad HTTP response code (404) was received when fetching the script.
解决方案
ServiceWorker.js
在您的views
文件夹中。这适用于由 express 呈现为页面的模板。将其移动到,public
以便像静态文件一样提供服务。
推荐阅读
- performance - 为什么动画代码和下一个动画帧之间有这么长的时间?
- regex - 两位数下一个点两位数下一个点两位数两个字母在单行文本字段中使用正则表达式
- web - PWA 在某些国家/地区受到限制?喜欢中国?
- scala - 如何以特定的时间间隔从服务器向客户端发送 Web 套接字消息?
- mysql - Mysql搜索组或字符串中的特定单词
- java - 在 jdk 1.8.0 编译器中从用户获取输入值
- angular - Vmmem 在 1GB 内存使用时崩溃
- python - 如何删除特定列值不是日期且所有列都是字符串类型的行
- mysql - 在不区分大小写的情况下,是否有任何排序规则可以区分“е”和“ё”?
- android - 获得第一个星期天,第二个星期二这样的一天