使用JavaScript aws-sdk从S3读取JSON时出错

时间:2016-07-21 06:48:26

标签: node.js amazon-s3 aws-sdk

这是我的小node.js app:

var http = require("http");
var url = require("url");
var aws = require("aws-sdk");
aws.config.region = "us-east-1";


http.createServer(function(request, response) {
    params = url.parse(request.url, true)["query"];
    var req_body = "";

    request.on("data", function(chunk) {
        req_body += chunk;
    })

    request.on("end", function() {
        fileName = params["file"];
        s3 = new aws.S3();
        s3.getObject(
            {"Bucket": "my_bucket", "Key": fileName},
            function(error, data) {
                fileJSON = data["Body"].toString();
                response.setHeader("Content-Type", "application/json");
                response.end(fileJSON);
            }
        );
    });
}).listen(8080);

我运行此应用并提交了带有参数file=my_file.json的GET请求。该应用程序返回了JSON,我的浏览器正确地解析了它 - 一切都很棒!

问题?在返回数据后,应用程序立即崩溃并抛出错误

TypeError: Cannot read property 'Body' of null

fileJSON = data["Body"].toString();行。如果应用程序未能返回任何数据,这可能是有意义的,但实际上它返回了正确的数据,然后然后崩溃。我仍然是node.js的新手,但这种行为似乎非常奇怪。有什么想法吗?

运行一些实验后(如评论中所示),当我提交127.0.0.1:8080/?file=my_file_json格式的GET请求时,浏览器会发出两个请求,其中params为{{1}正如预期的那样,{"file": "my_file.json"}为空。为什么会发生两个请求?为什么其中一个是空的?

0 个答案:

没有答案