【发布时间】:2019-05-23 20:36:14
【问题描述】:
尝试在 NodeJS(nodeJs 的新手)中执行 AWS Lambda,我在其中发出 http 请求。在Lambda执行结束时,我希望返回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);
};
Lambda 代码:
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);
}
【问题讨论】:
-
你能发布你得到的当前结果吗?
-
@Kannaiyan :
Result Response Code: undefined Result Response Message: undefined -
使用 npm 包
request可能会更容易。 -
将你的console.log行移到“result”函数中,否则它们将永远是未定义的(放在
return response之前)
标签: node.js amazon-web-services aws-lambda