Попытка выполнить AWS Lambda в NodeJS (новичок в nodeJs), в котором я делаю http-запрос. В конце выполнения лямбды я хочу вернуть код ответа и ответное сообщение HTTP-запроса.
Выполнение запроса http:
var executeRequest = function(request, callback) {
const req = https.request(request, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
process.stdout.write(d);
});
callback(res);
});
req.on('error', (e) => {
console.error(e);
});
req.end(request.body);
};
Лямбда-код:
exports.handler = (event, context, callback) => {
// Formulate request
var result = executeRequest(request, function(response) {
console.log("Response Code: ", response.statusCode);
console.log("Response Message: ", response.statusMessage);
// Successfully able to print the response above
return response;
});
console.log("Result Response Code: ", result);
console.log("Result Response Message: ", result);
}
Я хочу вернуть response.statusCode и response.statusMessage в качестве ответа от Lambda
return{
statusCode: <the code>,
body: <the message>,
};
Однако результат заполняется как неопределенный. Как извлечь требуемые параметры ответа, чтобы они могли быть возвращены правильно?
** Редактировать: **
Фрагмент после внесенных изменений:
Код с использованием Promise:
var executeRequest = function(request, callback) {
return new Promise((resolve, reject) => {
https.request(request, function(res) {
if(res.statusCode==200 || res.statusCode==404) {
resolve(res);
}
else {
console.error(res);
reject(res.statusCode);
}
}).end(request.body || '');
});
};
exports.handler = (event, context, callback) => {
// Formulate request
var value = executeRequest(request).then(function(result) {
console.log("Result ", result);
const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!') };
return response;
});
console.log(value);
}