node.js - fs 检测处理不同的错误类型

标签 node.js callback fs

通过我的 Nodejs 应用程序,我具有以下功能:

    const special_handle= function(err){
         console.error("Special Handled",err);
    }

    const normal_handle= function(err){
         console.error("Normal Handled",err);
    }

    const callback = function(err,mime,data){
       if(err) {
           if(/*file does not exist*/){
                 return special_handle(err);
           } else {
                  return normal_handle(err);
           }
       }
    }

    fs.readFile(fileFullPath,(err,data)=>{
        if(err){
           return callback(err);
        }

        const mimeType = mime.lookup(fileFullPath);
        callback(null,mimeType,data);
    });

当文件不存在时,我希望它执行特殊处理而不是执行正常处理。但是我如何通过回调知道该文件不存在?

最佳答案

如果文件/目录不存在,您将收到ENOENT错误。然后,您可以使用 switch 或 if 子句来处理不同的结果。

由不存在的文件/目录返回的典型 err 对象如下所示:

{ Error: ENOENT: no such file or directory, open 'test.js' errno: -2, code: 'ENOENT', syscall: 'open', path: 'test.js' }

所以如果你想检查文件是否存在,你可以这样做:

if (err.code === 'ENOENT') {
  return special_handle(err)
} else {
  return normal_handle(err)
}

或者,如果您想检查多种类型的错误,例如当您的程序无权读取文件/目录时会抛出EPERM,您可以使用switch子句:

switch (err.code) {
  case 'ENOENT':
    return special_handle(err)
  case 'EPERM':
    return eperm_handle(err)
  case default:
    return normal_handle(err)
}

关于node.js - fs 检测处理不同的错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47938256/

相关文章:

javascript - jQuery 创建回调

javascript - 从 flash 返回值到 javascript

javascript - 如何不覆盖node.js中的文件

node.js - 我可以使用 sharp 和 multer 来调整图像大小并在一次操作中保存到磁盘吗?

javascript正则表达式忽略chokidar的子目录

node.js - 提交大值时,casperjs 清空 POST 数据

ios - 在 iOS 中,http 204 响应返回空白页面,有办法阻止这种情况吗?

javascript - 如何将所有请求重定向到特定域名?

node.js - 使用nodeJs/Adonis在heroku上部署: I'm getting 503 Status - Service Unvailable

javascript - ReactJS - 如何通过逗号后的参数设置属性?