在Node中接收标头后结束HTTP请求?

时间:2012-09-04 03:30:18

标签: http node.js

我正在编写一个发出HTTP请求的Node.js应用程序,然后根据它收到的标头,我想要处理该请求的结果,或者终止请求。特别是,如果我试图下载的文件太大,我想停止请求(和下载;这意味着我不能忽略结果,因为它仍然会在后台下载)。有没有办法做到这一点?我在Node文档中找不到它。示例代码:

http.get(requestParams, function(res) {
  var bodyData = "";

  try {
    if(parseInt(res.headers['content-length']) > settings.maxSize) {
      done(new Error("Response is too large: " + res.headers['content-length']));
      // is there something I should do here to end the request?
      return;
    } else {
      log.debug("Content length of " + res.headers['content-length'] + " is under limit of " + settings.maxSize);
    }
  } catch(ex) {
    done(new Error("Error parsing content-length from response header:" + util.inspect(ex)));
    return;
  }

  res.setEncoding('utf8');

  res.on('data', function (chunk) {
    bodyData += chunk;
  });
  res.on('end', function() {
    done(null, bodyData);
  });
}).on('error', function(e) {
  done(e);
});

1 个答案:

答案 0 :(得分:1)

http.get()返回一个请求对象,该对象有一个abort方法,可用于中止当前请求

E.G。

var req = http.get(params, function(res){
    //content-length too large
    req.abort();
});

来自文档 - http://nodejs.org/api/http.html#http_request_abort

  

中止请求。 (自v0.3.8起新增。)

因此,除非您使用的是旧版本的节点,否则这应该适合您。