AWS Lambda: как ответить на http-запрос с помощью тела json в node.js

#node.js #aws-lambda

#node.js #aws-lambda

Вопрос:

Я должен ответить на запрос https с помощью тела Json в AWS Lambda API. Итак, мне нужно сначала прочитать основной запрос и получить некоторые данные, а затем получить значения из внешнего источника (api) на основе этих данных и отправить ответ обратно.

Я начал с этого:

 exports.handler = async (event) => {
    const id_ses =  event.queryResult.outputContexts[0].name;
    console.log(id_ses);
    const res = {
        statusCode: 200,
        body: JSON.stringify(data),
    };
    console.log(res);
    return  res;
};
//var response = { .... json response
  

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

 const id_ses =  event.queryResult.outputContexts[0].name;
console.log(id_ses);
  

Я не могу вывести ответ на запрошенную сторону снаружи из Lambda … хотя у меня хороший результат в тестовой консоли…

Любые знания или какая-либо ссылка, по которой я могу увидеть образец, были бы хороши….

Ответ №1:

Для начала вы можете использовать структуру, подобную приведенной ниже:

В следующем коде я использую две функции в качестве обработчика и sendToApi функции.

В функции-обработчике он получает запрос от AWS Lambda и считывает тело, а затем передает параметр name внутри тела JSON в sendToApi функцию. Затем sendToApi функция отправляет новый запрос во внешний API и извлекает значения, а затем возвращает его функции-обработчику через переменную результата. Затем обработчик обрабатывает ответ.

 module.exports.handler = async(event) => {
    const req = JSON.parse(event.body);
    const data = {
        name: req.name
    }
    const result = sendToApi(data);
    return {
        statusCode: 200,
        body: JSON.stringify(result),
      };
}

const sendToApi = (data) => {
    return new Promise((resolve, reject) => {
      let dataString = "";
  
      const options = {
        hostname: "example.com",
        path: "/api/v1",
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
      };
  
      const req = https.get(options, (res) => {
        res.on("data", (chunk) => {
          dataString  = chunk;
        });
  
        res.on("end", (chunk) => {
          dataString = JSON.parse(dataString);
          resolve(dataString);
        });
  
        res.on("error", (e) => {
          console.error(e);
          reject(false);
        });
      });
  
      req.write(querystring.stringify(data));
  
      req.end();
    });
  };

  

Для дальнейшего чтения: https://medium.com/better-programming/aws-tutorial-about-node-js-lambda-external-https-requests-logging-and-analyzing-data-e73137fd534c