我尝试使用http.get检索NodeJS中的远程JS文件 虽然我的浏览器中的文件是可访问和可读的,但我的http.get代码却抛出:
events.js:141
throw er; // Unhandled 'error' event
^
TypeError: Invalid non-string/buffer chunk
at chunkInvalid (_stream_readable.js:372:10)
at readableAddChunk (_stream_readable.js:124:12)
at Socket.Readable.push (_stream_readable.js:110:10)
at TCP.onread (net.js:523:20)
我尝试过多个库,但都出现了同样的错误(可能大多数只是包装了http.get API)
我发布了我的代码,虽然这是非常基本的。
var request = http.get("http://nodejs.org/static/js/download.js", function(error, response,body) {
console.log(body)
});
在 Mac OS X 10.11.3
上使用节点4.3.0 (5.6.0没有做任何魔法)谢谢!
答案 0 :(得分:0)
你的回调错了,试试这样:
var url = "http://nodejs.org/static/js/download.js";
var http = require('http');
http.get(url, function (res) {
console.log(res.statusCode);
res.on('data', (chunk) => {
console.log('BODY: ' + chunk);
});
res.on('end', () => {
console.log('No more data in response.')
});
}).on('error', (e) => {
console.log('Got error: ' + e.message);
});
这段代码告诉我:
301
BODY: <html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
正如您所看到的,http模块非常基本,并且不会遵循重定向,您应该使用更强大的功能,例如request
:
var request = require('request');
request.get(url, function (err, res) {
if (err) console.log(err);
console.log(res.body); // the output is the javascript code
});
或已宣传的版本request-promise
:
var request = require('request-promise');
request.get(url).then(function (res) {
console.log(res);
}).catch(function (err) {
console.log('Error ' + err.statusCode);
});