Отправка запросов https на AWS Lambda - PullRequest
0 голосов
/ 21 декабря 2018

Недавно обнаружил AWS, и у меня все отлично, сегодня я хочу отправить тестовое уведомление на мой iPhone X. Я пытаюсь сделать это, когда моя база данных получит обновление, используя план запуска DynamoDB.

Регулярные уведомления, доставленные на приборной панели, работают

Это то, что я пытался сделать до сих пор, я не получаю ни журнал консоли представителя в CloudWatch, ни ошибку.

console.log('Loading function');
const async = require('async');
const https = require('https');

exports.handler = async (event, context) => {
    console.log('Received event:', JSON.stringify(event, null, 2));

    const name = "35b83a10-9f46-4c2c-95e1-22c6d40005a8"; 

    var message = { 
      app_id: "appid",
      contents: {"en": "Your order has arrived at your doorstep"},
      include_player_ids: ["14894201-64f7-486a-b65e-6beedf5880f1",name,"8e0f21fa-9a5a-4ae7-a9a6-ca1f24294b86"]
     };

    sendNotification(message);

    console.log("Activation change detected. message sent");
    return `Successfully processed ${event.Records.length} records.`;
};


var sendNotification = function(data) {
  var headers = {
    "Content-Type": "application/json; charset=utf-8",
    "Authorization": "Basic hidden_in_question"
  };

  var options = {
    host: "onesignal.com",
    port: 443,
    path: "/api/v1/notifications",
    method: "POST",
    headers: headers
  };

  var req = https.request(options, function(res) {  
    res.on('data', function(data) {
      console.log("rep:");
      console.log(JSON.parse(data));
    });
  });

  req.on('error', function(e) {
    console.log("ERROR:");
    console.log(e);
  });

  req.write(JSON.stringify(data));
  req.end();
};

Я не получаю сообщение на своем iPhone.В чем здесь проблема?

Но получается:

Обнаружено изменение активации.сообщение отправлено

на консоль.

1 Ответ

0 голосов
/ 22 декабря 2018

HTTP-запрос - это асинхронное действие, которое означает, что вам нужно дождаться ответа, но в вашем случае вы возвращаетесь из обработчика сразу после вызова функции.Чтобы это исправить, нужно дождаться окончания http-запроса, прежде чем вернуться из обработчика.Следующий метод предполагает, что вы используете nodejs v8.x.

const https = require('https');

exports.handler = async (event, context) => {
    console.log('Received event:', JSON.stringify(event, null, 2));

    const name = "35b83a10-9f46-4c2c-95e1-22c6d40005a8"; 

    var message = { 
      app_id: "appid",
      contents: {"en": "Your order has arrived at your doorstep"},
      include_player_ids: ["14894201-64f7-486a-b65e-6beedf5880f1",name,"8e0f21fa-9a5a-4ae7-a9a6-ca1f24294b86"]
     };

    await sendNotification(message);

    console.log("Activation change detected. message sent");
    return `Successfully processed ${event.Records.length} records.`;
};


var sendNotification = function(data) {
  return new Promise(function(resolve, reject) {
      var headers = {
        "Content-Type": "application/json; charset=utf-8",
        "Authorization": "Basic hidden_in_question"
      };

      var options = {
        host: "onesignal.com",
        port: 443,
        path: "/api/v1/notifications",
        method: "POST",
        headers: headers
      };

      var req = https.request(options, function(res) {  
        res.on('data', function(data) {
          console.log("rep:");
          console.log(JSON.parse(data));
        });
        res.on('end', resolve);
      });

      req.on('error', function(e) {
        console.log("ERROR:");
        console.log(e);
        reject(e);
      });

      req.write(JSON.stringify(data));
      req.end();
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...