Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Serviceworker订阅在firefox中工作,但在Chrome中不工作。抛出错误:";注册失败-没有服务人员“&引用;_Node.js_Reactjs_Service Worker - Fatal编程技术网

Node.js Serviceworker订阅在firefox中工作,但在Chrome中不工作。抛出错误:";注册失败-没有服务人员“&引用;

Node.js Serviceworker订阅在firefox中工作,但在Chrome中不工作。抛出错误:";注册失败-没有服务人员“&引用;,node.js,reactjs,service-worker,Node.js,Reactjs,Service Worker,我正在尝试设置一个服务工作者,以便从nodejs后端接收推送通知到react。以下代码在Firefox中运行,但Chrome抛出错误“注册失败-没有服务人员”。serviceworker本身似乎正在工作,但在pushManager上包含订阅调用会引发错误。是否有人知道问题出在哪里,或者您需要更多信息 const checkSupport = () => { if (!('serviceWorker' in navigator) || !('PushManager' in window)

我正在尝试设置一个服务工作者,以便从nodejs后端接收推送通知到react。以下代码在Firefox中运行,但Chrome抛出错误“注册失败-没有服务人员”。serviceworker本身似乎正在工作,但在pushManager上包含订阅调用会引发错误。是否有人知道问题出在哪里,或者您需要更多信息

const checkSupport = () => {
  if (!('serviceWorker' in navigator) || !('PushManager' in window)) {
    return false;
  }
  return true;
};

const registerServiceWorker = async () => {
  const registration = await navigator.serviceWorker.register('/service.js', { scope: '/' });
  await navigator.serviceWorker.ready; // Waits for the serviceworker to be ready
  return registration;
};

const requestNotificationPermission = async () => {
  const permission = await Notification.requestPermission();
  if (permission !== 'granted') {
    return false;
  }
  return true;
};

// urlB64ToUint8Array is a magic function that will encode the base64 public key
// to Array buffer which is needed by the subscription option
const urlBase64ToUint8Array = (base64String: string) => {
  const padding = '='.repeat((4 - (base64String.length % 4)) % 4);
  const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');

  const rawData = atob(base64);
  const outputArray = new Uint8Array(rawData.length);

  for (let i = 0; i < rawData.length; ++i) {
    outputArray[i] = rawData.charCodeAt(i);
  }
  return outputArray;
};

const installServiceWorker = async (team: number, semester: number) => {
  try {
    // Check browser compatability and notification permission
    if (!checkSupport() || !(await requestNotificationPermission())) return;
    // Register serviceworker
    const registration = await registerServiceWorker();

    registration.showNotification('Hello notification!');

    // Subscribe the user to notifications
    const publicVAPID =
      '<String>';
    const applicationServerKey = urlBase64ToUint8Array(publicVAPID);
    const subscription = await registration.pushManager.subscribe({
      userVisibleOnly: true,
      applicationServerKey
    });  

  } catch (error) {
    console.error(new Error(error));
  }
};

export default installServiceWorker;
这就是错误所在


谢谢。

所以我发现serviceworker不工作的原因是create react应用程序(我用它引导我的应用程序)包含它自己的serviceworker。当我删除对它的调用时,我自己的自定义serviceworker开始工作

console.log('Hello from serviceworker');

self.addEventListener('activate', async () => {
  console.log('activated');
});

self.addEventListener('push', (event) => {
  const data = event.data.json();

  self.registration.showNotification(data.title, {
    body: 'Yay it works!'
  });
});