Как мне вернуть содержимое этой функции на клиентскую сторону? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть функция, которую я вызываю с помощью

     fetch(http://localhost:8888/.netlify/functions/token-hider? 
     stateName=' +stateName) 

на стороне клиента.

функция токен-хидера выглядит следующим образом:

const qs = require("qs");
const fetch = require("node-fetch");

var alertEndpoint = "";
var parkEndpoint = "";
var parksWithAlerts = "";



exports.handler = async function getURLS(event, context, callback) 
{
  // Get env var values defined in our Netlify site UI
 const {api_key, alert_api_url, park_api_url} = process.env;

  var stateName =event.queryStringParameters.stateName;
  alertEndpoint = `${alert_api_url}${stateName}${api_key}`;
  parkEndpoint = `${park_api_url}${stateName}${api_key}`;

 getData();



 async function getData(alertsArea, alertHeader) {


 const [getAlertData, getParkData] = await 
 Promise.all([fetch(alertEndpoint), fetch(parkEndpoint)] );


 var alertResults = await getAlertData.json();
 var parkResults=  await getParkData.json();
 var alertData = alertResults.data;
 var parkData = parkResults.data;

 parksWithAlerts = parkData.map(park => {
  park.alertData = alertData.filter(alert => alert.parkCode === 
  park.parkCode);
  return park

  });

  console.log(parksWithAlerts);

   }
 console.log(callback);
 };

как я могу вернуть содержимое parksWithAlerts обратно на сторону клиента после завершения этой функции?

Ответы [ 2 ]

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

Попробуйте узнать больше о функциях обратного вызова в Javascript. Это прямо в вашем коде, callback, который вы печатаете, на самом деле предполагается вызывать после того, как вы выполнили свой код, и вы можете сделать это callback(parksWithAlerts);. При вызове функции getURLS вы предоставите функцию, которая должна вызываться с аргументами.

Примеры: https://www.geeksforgeeks.org/javascript-callbacks/

0 голосов
/ 12 июня 2019

Вот пример с обработкой ошибок и возвращением типа ответа JSON

token-hider

import fetch from "node-fetch";

// Get env var values defined in our Netlify site UI
const {api_key, alert_api_url, park_api_url} = process.env;

async function getJson(response) {
  return await response.json();
}

const alertEndpoint = stateName => {
  return new Promise(function(resolve, reject) {
    fetch(`${alert_api_url}${stateName}${api_key}`)
      .then(response => {
        if (!response.ok) { // NOT res.status >= 200 && res.status < 300
          return reject({ statusCode: response.status, body: response.statusText });
        }
        return resolve(getJson(response))
      })
      .catch(err => {
        console.log('alertEndpoint invocation error:', err); // output to netlify function log
        reject({ statusCode: 500, body: err.message });
      })
  });
}

const parkEndpoint = stateName => {
  return new Promise(function(resolve, reject) {
  fetch(`${park_api_url}${stateName}${api_key}`)
    .then(response => {
      if (!response.ok) { // NOT res.status >= 200 && res.status < 300
        return reject({ statusCode: response.status, body: response.statusText });
      }
      return resolve(getJson(response))
    })
    .catch(err => {
      console.log('parkEndpoint invocation error:', err); // output to netlify function log
      reject({ statusCode: 500, body: err.message });
    })
  })
}

exports.handler = function(event, context) {
  const stateName = event.queryStringParameters.stateName;
  return Promise.all([alertEndpoint(stateName), parkEndpoint(stateName)])
    .then(values => {
      const [alertData, parkData] = values;
      const parksWithAlerts = parkData.map(park => {
        park.alertData = alertData.filter(alert => alert.parkCode === park.parkCode);
        return park;
        });
      return {
        statusCode: 200,
        headers: { 'content-type': 'application/json' },
        body: JSON.stringify(parksWithAlerts)
      };
    })
    .catch(error => {
      return error;
    });
};

ПРИМЕЧАНИЕ: Если вы пытаетесь скрыть токен, не устанавливайте его из общедоступного репозитория на Netlify.

Кроме того, этот код не был проверен на 100%, поэтому могут быть некоторые проблемы, которые необходимо решить. Макет и структура ответов - это то, что я использую в нескольких своих лямбда-функциях в Netlify.

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