一尘不染

节点请求-如何确定请求期间是否发生错误?

node.js

我正在尝试利用node-request模块,但是文档不是那么好。如果我请求有效资源并将其通过管道传输到可写流,则一切正常。但是,如果我向无效对象发出请求,则仍会创建可写流。例如,使用以下代码段:

var x = request("http://localhost:3000/foo.jpg");
var st = fs.createWriteStream("foo.jpg");
x.pipe(st);

如果服务器上存在foo.jpg资源,则将数据通过管道传输到流,并在服务器上创建文件。但是,如果服务器 上不 存在foo.jpg
,则仍将创建一个空白容器文件。似乎没有错误事件或可以用来确定请求是否返回404的任何内容。我尝试了以下类似操作:

var x = request("http://localhost:3000/foo.jpg", function(err, response, body) {
    if(response.statusCode === 200) {
        // Success
        var st = fs.createWriteStream("foo.jpg");
        x.pipe(st);
    }
});

并且:

request("http://localhost:3000/foo.jpg", function(err, response, body) {
    if(response.statusCode === 200) {
        // Success
        var x = response.request;
        var st = fs.createWriteStream("foo.jpg");
        x.pipe(st);
    }
});

无济于事。这个想法很简单;我只想将URL标识的文件复制到本地服务器。如果请求无效(404等),请不要通过管道传输文件;如果请求有效,则通过管道传输文件。有什么建议?


阅读 365

收藏
2020-07-07

共1个答案

一尘不染

我写了请求:)

你可能想试试这个

var r = request(url)
r.on('response', function (resp) {
   resp.headers 
   resp.statusCode
   r.pipe(new WritableStream())
})
2020-07-07