Мне нужна помощь для экспорта или активации функции сервисного работника для выполнения push-уведомлений, установленных в экспрессе с углового интерфейса. Он работает в index.html с Express, но я не могу связаться с сервисным работником из внешнего интерфейса для создания и отправки полезной нагрузки через внешний интерфейс. Что я делаю неправильно? Помощь очень ценится.
Серверная часть: main.js
const publicVapidKey = 'publicVapidKey';
if ('serviceWorker' in navigator) {
send().catch(err => console.error(err));
}
async function send() {
// Register Service Worker
console.log("Registering service worker...");
const register = await navigator.serviceWorker.register('/sw.js', {
scope: '/'
});
console.log('Service Worker Registered...');
// Register Pushs
console.log('Registering Push...');
const subsciption = await register.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(publicVapidKey)
});
console.log('Push registered...');
// Send Push Notification
console.log('Sending push...');
await fetch('/subscribe', {
method: 'POST',
body: JSON.stringify(subsciption),
headers: {
'content-type': 'application/json'
}
});
console.log('Push sent...');
}
module.exports = {send}
function urlBase64ToUint8Array(base64String) {
const padding = '='.repeat((4 - base64String.length % 4) % 4);
const base64 = (base64String + padding)
.replace(/-/g, '+')
.replace(/_/g, '/');
const rawData = window.atob(base64);
const outputArray = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
}
sw.js
console.log('Service Worker Loaded');
self.addEventListener('push', event => {
const data = event.data.json();
console.log('Push Received...');
self.registration.showNotification(data.title, {
body: 'Client request!',
});
});
routs / user.js
! Если я активирую приведенный ниже код, он выдаст referenceError: навигатор не определен!
at Object.<anonymous>
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
var push_notification = require('../client/main');
router.get('/serviceWorker', push_notification.send);
^^ Как мне экспортировать вышеуказанную функцию работника сервиса? ^^
angularimport
getService() {
return this._http.get('http://127.0.0.1:3000/users/serviceWorker', {
observe: 'body',
withCredentials: true,
headers: new HttpHeaders().append('Content-Type', 'application/json')
})
}
app.js имеет классическую конструкцию и хорошо работает.