如何处理Node.js中的fs.createReadStream()错误?

用户名

我构建了一个简单的服务器来处理错误(例如,找不到文件),该服务器可以正常工作:

    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);
            }
        }
    });

但是我决定要支持压缩,因此我需要使用它fs.createReadStream()来读取文件,就像在此示例中一样:

//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);
}

所以我的问题是,由于fs.createReadStream()没有回调函数,因此我试图找出如何将错误处理合并到流方法中。

如何处理Node.js fs.createReadStream()的错误?

mscdex

流可以发出error事件。您可以侦听此事件,以防止引发错误的默认行为:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何处理 node.js 请求中的 URI 错误?

来自分类Dev

Node.js-如何处理流错误事件

来自分类Dev

在JavaScript(Node.js)中更新MongoDB集合时如何处理错误

来自分类Dev

如何处理Express Node.js中的主体解析器错误

来自分类Dev

侦听 fs.createReadStream 上发出的错误

来自分类Dev

如何处理承诺中的错误?

来自分类Dev

如何处理淘汰订阅中的错误

来自分类Dev

如何处理Shapely中的舍入错误

来自分类Dev

如何处理GRequests中的错误?

来自分类Dev

如何处理Retrofit 2.0中的错误

来自分类Dev

如何处理R降价中的错误?

来自分类Dev

如何处理Angular组件中的错误

来自分类Dev

如何处理NestJS中的TypeORM错误?

来自分类Dev

如何处理python中的递归错误?

来自分类Dev

如何处理fetch()中的错误请求

来自分类Dev

如何处理python中的错误?

来自分类Dev

如何处理Haskell中的createProcess错误?

来自分类Dev

如何处理承诺中的错误?

来自分类Dev

如何处理execvp中的错误?

来自分类Dev

如何处理多个流中的错误?

来自分类Dev

如何处理mio中的错误?

来自分类Dev

如何处理python中的“回溯”错误?

来自分类Dev

如何处理spring集成中的错误

来自分类Dev

如何处理 Kafka Consumer 中的错误

来自分类Dev

如何处理 Django 中的错误

来自分类Dev

Next.JS:如何处理getInitialProps中的错误?

来自分类Dev

如何处理node.js casterror?

来自分类Dev

节点js中带fs的未处理“错误”事件

来自分类Dev

Node.JS中的createReadStream