Почему я получаю «Ошибка: нет набора ключей vapidDetails.publicKey»?

#node.js #angular #server #push-notification #progressive-web-apps

#node.js #angular #сервер #push-уведомление #progressive-веб-приложения

Вопрос:

Я пытаюсь запустить ‘node.js ‘ сервер для push-уведомлений. Но вместо этого я получил ошибку. Это было описано в руководстве по добавлению push-уведомлений с помощью SwPush в PWA на Angular.

Нужно ли мне куда-то поместить открытый ключ?? Я сгенерировал открытый и закрытый ключи с помощью «web-push generate-vapid-keys».

Server.js скрипт:

     // server.js
require('dotenv').config({ path: 'variables.env' });

const express = require('express');
const cors = require('cors')
const webPush = require('web-push');
const bodyParser = require('body-parser');

const app = express();

app.use(cors());

app.use(bodyParser.json());

const publicVapidKey = process.env.PUBLIC_VAPID_KEY;
const privateVapidKey = process.env.PRIVATE_VAPID_KEY;

webPush.setVapidDetails('mailto:test@example.com', publicVapidKey, privateVapidKey);

app.post('/notifications', (req, res) => {
  const subscription = req.body.notification;

  console.log(`Subscription received`);

  res.status(201).json({});

  const payload = JSON.stringify({
    notification: {
      title: 'Notifications are cool',
      body: 'Know how to send notifications through Angular with this article!',
      icon: 'https://www.shareicon.net/data/256x256/2015/10/02/110808_blog_512x512.png',
      vibrate: [100, 50, 100],
      data: {
        url: 'https://medium.com/@arjenbrandenburgh/angulars-pwa-swpush-and-swupdate-15a7e5c154ac'
      }
    }
  });

  webPush.sendNotification(subscription, payload)
    .catch(error => console.error(error));
});

app.set('port', process.env.PORT || 5000);
const server = app.listen(app.get('port'), () => {
    console.log(`Express running → PORT ${server.address().port}`);
});
  

Ответ №1:

В вашей строке 1:

 require('dotenv').config({ path: 'variables.env' });
  

Приведенный выше код извлекает вашу информацию из файла с именем variables.env, который вы не создавали;
Итак, чтобы выполнить это, создайте файл с именем variables.env и поместите туда все ваши переменные среды

или

Чтобы заставить его запрашивать вашу информацию напрямую из .env файла, измените код в строке 1 на:

 require('dotenv').config();