Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用JavaScript aws sdk从S3读取JSON时出错_Node.js_Amazon S3_Aws Sdk - Fatal编程技术网

Node.js 使用JavaScript aws sdk从S3读取JSON时出错

Node.js 使用JavaScript aws sdk从S3读取JSON时出错,node.js,amazon-s3,aws-sdk,Node.js,Amazon S3,Aws Sdk,这是我的小node.js应用程序: 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_b

这是我的小node.js应用程序:

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);
我运行了这个应用程序,并提交了一个带有URL参数
file=my_file.json
的GET请求。应用程序返回了JSON,我的浏览器正确地解析了它——一切都很棒

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

TypeError:无法读取null的属性“Body”

fileJSON=data[“Body”].toString()行上。如果应用程序未能返回任何数据,这可能是有道理的,但实际上它返回了正确的数据,然后崩溃了。我对node.js还是相当陌生,但这种行为似乎非常奇怪。有什么想法吗



在运行了一些实验(如评论中所建议的)之后,结果表明,当我提交一个GET请求时,浏览器会发出两个请求,一个是
params
{file:“my_file.json”}
,另一个是
params
为空。为什么会发生两个请求?为什么其中一个是空的?

您可能会请求服务器两次—一次有文件名,另一次没有文件名?检查由
getObject
@VsevolodGoloviznin返回的
error
,您是对的:服务器正在收到两个请求,第一个是
params
对象等于
{file:“my_file.json”}
,然后等于
{code>。所以我想问题的核心是:为什么这两个请求都发生了?我只是在本地运行应用程序并在浏览器中访问
127.0.0.1:8080/?file=my_file.json
来提交GET请求。它可以请求
favicon.ico
,这就是它再次命中该方法的原因