我正在尝试使用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上使用Node 4.3.0(5.6.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);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句