在NodeJS中以字符串形式读取远程JS文件

dod_basim

我正在尝试使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章