为什么会出现“错误:没有密钥设置vapidDetails.publicKey”?

问题描述

我正在尝试运行“ node.js”服务器进行推送通知。但是我却收到一个错误。这是在使用SwPush将推送通知添加到Angular上的PWA的教程中得到的。

我需要将公钥放置在某个地方吗?我已经使用“ 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:[email protected]',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行:

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

上面的代码从尚未创建的名为 variables.env 的文件中获取信息; 为此,请创建一个名称为 variables.env 的文件,并将所有环境变量放在此处

OR

为了使其直接需要 .env 文件中的信息,请将第1行中的代码更改为:

require('dotenv').config();