How to handle errors for fs.createReadStream () in Node.js?

I built a simple server that handled errors (files that were not found, for example) that worked fine:

    fs.readFile(fullPath, function(err, data) {

        // If there is an error, return 404
        if (err) {
            res.writeHead(404);
            res.end();
            debug.log("File denied: " + fullPath);
        } else {
            var length      = data.length;
            var extension   = getExtension(path);
            var type        = getType(extension);

            // If the type doesn't match a MIME type that this app serves, return 404
            if (!type) {
                res.writeHead(404);
                res.end();
                debug.log("File denied: " + fullPath);

            // Otherwise, serve the file
            } else {
                res.writeHead(200, {
                    'Content-Length' : length,
                    'Content-Type' : type
                });
                res.write(data);
                res.end();
                debug.log("File served: " + fullPath);
            }
        }
    });

But I decided that I want to support compression, so I need to use a fs.createReadStream()file to read, as in this example I'm looking at:

//Check request headers
var acceptEncoding = req.headers['accept-encoding'];
if (!acceptEncoding) {
    acceptEncoding = '';
}

var raw = fs.createReadStream(fullPath);

// Note: this is not a conformant accept-encoding parser.
// See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3
if (acceptEncoding.match(/\bdeflate\b/)) {
    response.writeHead(200, { 'content-encoding': 'deflate' });
    raw.pipe(zlib.createDeflate()).pipe(response);
} else if (acceptEncoding.match(/\bgzip\b/)) {
    response.writeHead(200, { 'content-encoding': 'gzip' });
    raw.pipe(zlib.createGzip()).pipe(response);
} else {
    response.writeHead(200, {});
    raw.pipe(response);
}

So, my problem is that I am trying to figure out how to include error handling in the stream, because it fs.createReadStream()does not fulfill the callback function.

How to handle errors for Node.js fs.createReadStream ()?

+4
source share
1 answer

error. , :

raw.on('error', function(err) {
  // do something with `err`
});
+4

Source: https://habr.com/ru/post/1568909/


All Articles