#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