如何使用节点请求从另一个域获取json文件?
我有一个在远程服务器的JSON文件。 <domainName>/info.json
。 当我导航到我得到的url:
{ "version": "1.8 RC05" }
但是,当我从我的terminalcurl <domainname>/info.json
,我得到如下所示:
T*K-* RP2Գr60Uk % c9@
当我使用节点request
如下:
app.get('/', function(req,res){ request.get('<domainname>/info.json').on('response', function(data){ data = data.setEncoding('utf8'); console.log(data.statusCode); res.json(data); }); });
我得到以下回应:
{ "statusCode": 200, "headers": { "content-type": "application\/json; charset=utf-8", "content-length": "46", "connection": "close", "date": "Tue, 22 Sep 2015 09:56:22 GMT", "content-encoding": "gzip", "cache-control": "max-age=1800, public", "last-modified": "Mon, 21 Sep 2015 09:57:35 GMT", "etag": "\"93934d435cecbf8f5bde8627903587a0\"", "server": "AmazonS3", "age": "903", "x-cache": "Hit from cloudfront", "via": "1.1 44e39d55d481d0cc2faa76f70b7a556b.cloudfront.net (CloudFront)", "x-amz-cf-id": "eOy_rb3vasUnhb9bvvKI3AZvcvXAzJeJCI3TmK94ZlaxHu1XwBKzGg==" }, "request": { "uri": { "protocol": "https:", "slashes": true, "auth": null, "host": "<domainname>", "port": 443, "hostname": "<domainname>", "hash": null, "search": null, "query": null, "pathname": "\/info.json", "path": "\/info.json", "href": "<domainname>\/info.json" }, "method": "GET", "headers": { } } }
我认为它必须做一些charset=utf-8
,但不知道如何进行。 如何让我的节点应用程序获取第一个json对象并提供服务?
编辑1
正如我在答复中所build议的那样,我的立场如下:
app.get('/', function(req,res){ request('<domainname>/info.json', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) } }); });
现在我得到以下回应:
"\u001f \b\u0000\u0000\u0000\u0000\u0000\u0000\u0003 T*K-* S RP2ԳP\br60U \u0005\u0000k % \u001a\u0000\u0000\u0000"
请参阅节点请求文档 。
你可能想要发送的body
,而不是整个的response
:
app.get('/', function(req,res){ request('<domainname>/info.json', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) } }) });
你也可能想要gzip /解压缩响应。
为此,您可以使用Nodes Zlib实现
你可以在这里看到它的使用exmaple我如何ungzip(解压缩)一个NodeJS请求的模块gzip响应正文?