AWS Lambda http请求:无法将主体字符串化为json:将循环结构转换为JSON

时间:2016-02-08 18:06:09

标签: json amazon-web-services httprequest aws-lambda

我想在AWS Lambda函数中返回HTTP请求的结果:

var http = require('http');

exports.someFunction = function(event, context) {
     var url = "http://router.project-osrm.org/trip?loc=47.95,12.95&loc=47.94,12.94";
     http.get(url, function(res) {
            context.succeed(res);
          }).on('error', function(e) {
            context.fail("Got error: " + e.message);
          });
}

它应该直接返回我在浏览器中直接打开url时获得的内容(尝试查看预期的json)。

当我致电context.succeed(res)时,AWS Lambda会返回以下错误消息:

{
  "errorMessage": "Unable to stringify body as json: Converting circular structure to JSON",
  "errorType": "TypeError"
}

我认为我需要使用res而不是res本身的某些属性,但我无法确定哪一个包含我想要的实际数据。

1 个答案:

答案 0 :(得分:1)

如果您使用原始http模块,则需要收听dataend个事件。

exports.someFunction = function(event, context) {
    var url = "http://router.project-osrm.org/trip?loc=47.95,12.95&loc=47.94,12.94";
    http.get(url, function(res) {
        // Continuously update stream with data
        var body = '';
        res.on('data', function(d) {
            body += d;
        });
        res.on('end', function() {
            context.succeed(body);
        });
        res.on('error', function(e) {
            context.fail("Got error: " + e.message);
        });
    });
}

使用request https://www.npmjs.com/package/request之类的其他模块可以让您不必管理这些事件,而且您的代码可以恢复到以前的状态。