Заголовки не установлены. Node.js api push-уведомление - PullRequest
0 голосов
/ 19 сентября 2018

Здравствуйте, я пытаюсь настроить push-уведомления для моего веб-приложения.

Я получаю свою подписку, как и должен.

Правильно сохраняет его в моей базе данных.

Он отправляет мое уведомление, как и должно, если в базе данных есть только ОДИН пользователь

, и я хочу отправить более чем одному пользователю :)

Я использую:

  • Vue.js (framework)

  • Axios (post)

  • node.js (api)

  • mongoDB (база данных)

Вот мой пост в API.

await axios({
          method: 'post',
          url: 'API',
          data: {
            subscription: JSON.stringify(subscription),
            storeId: storeId
          },
          headers: {
            'Content-Type': 'application/json'
          }
        })

Это регистрирует мой пост, но затем я получаю ошибку броска.что «Невозможно установить заголовки после их отправки».

Я использую CORS в своем приложении следующим образом:

const cors = require('cors')

const app = express();
app.use(bodyParser.json());
app.use(cors())
app.use(morgan('combined'))

Способ обработки сообщения с моего веб-сайта.это путем нахождения моих подписок, а затем сопоставления и произнесения подписки foreach

webpush

//subscribe routes
app.post('/pushNotification', (req, res) => {
  var storeId = req.body.storeId
  res.setHeader('Content-Type', 'application/json');
  console.log(storeId)
  if (req.body.storeId != null) {
    console.log('Test1')
    //get pushSubscription object

    //create payload
    const payload = JSON.stringify({ title: 'push test' })
    Push.find({
      "storeId": storeId
    },
    'subscription', function(error, response) {
      console.log('Test2')
      console.log(response)
      response.map(item => {
        res.status(201).json({});
        console.log('Test3')
        var subscription = item.subscription
        console.log(subscription)
        webpush.sendNotification(subscription, payload).catch(err => console.error(err));
      })
    })
  } else {
    res.send("failed")
  }
})

Как я могу где-то прочитать, я не устанавливаю заголовки или что-то правильно.Я использовал Cors, как в учебниках и прочее.

Так что это похоже на сбой, потому что он повторяется неправильно.но я не вижу, как.

СООБЩЕНИЕ ОБ ОШИБКЕ:

error message

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

res.json([body]) устанавливает соответствующий заголовок и отправляет результат:

Отправляет ответ JSON.Этот метод отправляет ответ (с правильным типом содержимого), который является параметром, преобразованным в строку JSON с использованием JSON.stringify ().

Итак, во-первых, вам не нужно устанавливатьЗаголовок вручную.во-вторых, если response имеет более одного элемента, так как вы не можете отправить несколько результатов для запроса, вы не должны использовать res.json в map.Кроме того, помните webpush.sendNotification, что он также может отправить результат.

0 голосов
/ 19 сентября 2018

вы получаете эту ошибку, потому что res.status (201) .json ({}) уже установил заголовки и отправил ответ клиенту, но webpush.sendNotification также пытается установить заголовки. Вы должны использовать только webpush.sendNotification(subscription, payload).catch(err => console.error(err));

...