Node.js 使用JavaScript aws sdk从S3读取JSON时出错
这是我的小node.js应用程序: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
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
,这就是它再次命中该方法的原因