Search code examples
node.jsnode-request

Pipe image using node-request but abort on non-200 http status code


I'm trying to pipe an image stored on Amazon S3 using node-request. However, sometimes an image doesn't exist, which is exposed by S3 as a status code 403. I'm struggling to see how I can pipe in case of success (200) but take an alternative action in case of a non-200.

Using the abort() method seemed like the way to go but getting an r.abort is not a function, even though it should be available on the request.

// context: inside a request handler, where `res` is the response to write to
const r = request(url)
  .on('response', function (response) {
    if (response.statusCode !== 200) {
      r.abort(); //failing
      // I want to stop the piping here and do whatever instead.
    }
  })
  .pipe(res);

Thoughts?


Solution

  • To answer my own question: don't start piping until sure it's correct:

     request(url)
        .on('response', function (r) {
          if (r.statusCode !== 200) {
            //take other action
          }
          r.pipe(res);
        })