Получать данные из внешнего статического файла JSON и использовать в AWS Lambda - PullRequest
1 голос
/ 27 июня 2019

Я хочу извлечь некоторые данные из внешнего статического файла JSON, основываясь на событии, отправленном в AWS Lambda.

Поэтому, когда кто-то отправляет свой "customer_id", мы извлекаем соответствующие "email" и "option"из внешнего файла JSON

https://3objects.netlify.com/3objects.json

Вот код, который у меня есть до сих пор?

const AWS = require('aws-sdk');
const ses = new AWS.SES();
const request = require('request');

exports.handler = (event) => {
    console.log(event.customer_id);

    request({
url: 'https://3objects.netlify.com/3objects.json',
method: 'GET',
headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json'
},
body: JSON.stringify({
})
}, function (error, response) {
if (!error && response.statusCode == 200) {
    var jsonResponse = JSON.parse(body); // turn response into JSON

    // do stuff with the response and pass it back to Lambda...
});



    // After JSON data retrieval of 'email' and 'option' from https://3objects.netlify.com/3objects.json we send them an email with this info
    clientEmail = email;
    contact_option = option;

    var eParams = {Destination: {ToAddresses: [clientEmail]}, Message: {Body: { Text: { Data: 'Your contact option is ${contact_option}' },},Subject: { Data: "Your Contact Preference" }}, Source: "sales@example.com"};
    var email = ses.sendEmail(eParams, function (err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); } });
};

Как я могу запрашивать и использовать эти внешние данные URL JSON?

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Я предпочитаю использовать node-fetch . Это пакет, который позволяет вам использовать функцию fetch из ES6.

Я создал пример использования node-fetch. Функция getCustomers получает клиентов из URL.

Затем я создал функцию, которая возвращает Promise. Внутри этого Обещания извлеченные данные отправляются по почте с использованием AWS.SES().

const AWS = require('aws-sdk'),
ses = new AWS.SES(),
fetch = require('node-fetch');

exports.handler = async (event) => {
  console.log(event.customer_id);
  
  const customers = await getCustomers();
  
  customers.map(async customer => {
    await sendEmailToCustomer(customer);
  });
}

async function getCustomers() {
  try {
    const resp = await fetch('https://3objects.netlify.com/3objects.json');
    const json = await resp.json();
    
    console.log(json);
    return json;
  }
  catch(e) {
    throw e;
  }
}

const sendEmailToCustomer = (customer) => new Promise((resolve, reject) => {
  ses.sendEmail({
    Destination:
      { ToAddresses: [customer.email] },
    Message:
      {
        Body: { Text: { Data: `Your contact option is ${customer.customer_id}` }},
        Subject: { Data: "Your Contact Preference" }
      },
    Source: "sales@example.com"}, (error, result => {
      if (error) return reject(error);
      resolve(result);
      console.log(result);
    })
}
0 голосов
/ 27 июня 2019

В общем, вы должны опубликовать точную ошибку, с которой вы столкнулись, вместо общего вопроса.это поможет разработчикам выяснить, с какой проблемой вы столкнулись.

В приведенном выше фрагменте кода часть

    // After JSON data retrieval of 'email' and 'option' from https://3objects.netlify.com/3objects.json we send them an email with this info
    clientEmail = email;
    contact_option = option;

    var eParams = {Destination: {ToAddresses: [clientEmail]}, Message: {Body: { Text: { Data: 'Your contact option is ${contact_option}' },},Subject: { Data: "Your Contact Preference" }}, Source: "sales@example.com"};
    var email = ses.sendEmail(eParams, function (err, data) { if (err) console.log(err); else { console.log("===EMAIL SENT==="); } });

выполняется до возврата request.Вам нужно переместить этот код в ваш обратный вызов, чтобы выполнить его после завершения request.

Я бы также предложил вам преобразовать ваш код в async / await для лучшей читаемости и избегать такого типаошибка.См. Эту статью, чтобы узнать, как это сделать: https://www.stormacq.com/2019/06/22/async-js.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...