我正在尝试创建一个AWS Lambda函数,该函数将按计划调用DELETE。
我正在使用Node.js。当仅从本地计算机上的Node.js运行时,请求正常运行。
代码如下:
const https = require('https');
var options = {
host: 'MY_HOST',
path: '/v1/api/orders',
port: 80,
method: 'DELETE'
};
console.info('Do the DELETE call');
var reqDelete = https.request(options, function(res) {
res.on('data', function(d) {
console.info('DELETE result:\n');
console.log(d.toString('utf8'));
console.info('\nCall completed');
});
});
reqDelete.on('error', function(e) {
console.error(e);
});
reqDelete.end();
我的输出是这样的:
Do the DELETE call
DELETE result:
{"message":"Cleanup triggered"}
Call completed
就如我所料。但是,当我从AWS Lambda函数内部运行时,我得到了null
的结果,而Lambda函数的Log输出就是这个。
START RequestId: fb2a1969-94e8-4c11-b43e-14ff6a4cc426 Version: $LATEST
2020-06-16T01:42:06.875Z fb2a1969-94e8-4c11-b43e-14ff6a4cc426 INFO Do the DELETE call
END RequestId: fb2a1969-94e8-4c11-b43e-14ff6a4cc426
REPORT RequestId: fb2a1969-94e8-4c11-b43e-14ff6a4cc426 Duration: 483.49 ms Billed Duration: 500 ms
Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 125.35 ms
请注意,它会打印出“执行DELETE调用”,因此我知道它正在进入我的代码,但其他任何内容都没有打印出来。
Lambda的身体是这样的:
exports.handler = async (event) => {
// The exact code from above with the actual host name.
};
为什么在本地计算机上运行时,Lambda函数无法执行我的API调用?
答案 0 :(得分:1)
您正在使用async Lambda function handler,但是未等待HTTP请求。这将导致函数在https.request()
调用完成之前完成执行。
如果您想使用回调而不是promise,请为该函数定义一个非异步处理程序:
exports.handler = (event) => {
// The exact code from above with the actual host name.
};