_
我想从我的 Lambda函数中访问第三方Rest API 。 (例如“ http://www.mocky.io/v2/5c62a4523000004a00019907”)。
这将提供一个JSON文件,然后将其用于数据提取
_
var http = require('http');
exports.handler = function(event, context, callback) {
console.log('start request to Mocky');
http.get('http://www.mocky.io/v2/5c62a4523000004a00019907', function(res) {
console.log(res);
})
.on('error', function(e) {
console.log("Got error: " + e.message);
});
};
这不会引发错误,但似乎也没有提供JSON
_
1)如何提取JSON ,以便可以对其进行处理
2)以后,我可能还需要通过请求标头中的身份验证(承载者)进行发送。使用这种方法还能做到吗?
答案 0 :(得分:1)
问题很可能是您的lambda函数在记录响应之前已退出。
我们一直使用Authorization
标头来调用我们的lambda。是否可以使用一个调用第三方API的问题取决于他们,而不是您自己,所以请查看文档。
由于您的HTTP调用是异步执行的,因此lambda的执行会在解决该调用的同时继续执行。由于lambda中没有更多命令,因此它会在您的响应返回之前退出并可以记录。
编辑:http.get
模块很难与async / await完美地结合使用。由于这个原因,我通常使用superagent
,axios
或request
甚至是node-fetch
。我将在答案中使用request
。如果必须使用本机模块,请参见EG this answer。否则,npm install request request-promise
并在下面使用我的答案。
最近很多人用于这种呼叫的方案使用async/await
,例如(需要Node 8 +):
var request = require('request-promise')
exports.handler = async function(event, context, callback) {
console.log('start request to Mocky');
try {
const res = await request.get('http://www.mocky.io/v2/5c62a4523000004a00019907')
console.log(res)
callback(null, { statusCode: 200, body: JSON.stringify(res) })
}
catch(err) {
console.error(err.message)
callback('Got error ' + err.message)
}
};
异步/等待版本更容易遵循IMO。
async
函数中标有await
的所有内容都必须先解析,然后才能继续执行。 try this one周围有很多关于此的文章。
答案 1 :(得分:0)