ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Filer路径与错误处理速查:Filer.path独有方法与errno错误码完整指南

Filer路径与错误处理速查:Filer.path独有方法与errno错误码完整指南 Filer路径与错误处理速查Filer.path独有方法与errno错误码完整指南【免费下载链接】filerNode-like file system for browsers项目地址: https://gitcode.com/gh_mirrors/fi/filerFiler是一个运行在浏览器中的 Node-like 虚拟文件系统。本文是一份速查指南带你快速掌握 Filer 的两大高频痛点Filer.path 的独有路径处理方法以及errno 错误码完整清单——让你写浏览器端文件操作时路径不再差一个斜杠报错不再看不懂。一、快速开始3 分钟跑通 FilerFiler 通过 npm 安装后核心入口导出path和Errors两个与本文直接相关的对象const Filer require(filer); const fs Filer.fs(test); // 获取虚拟文件系统实例 fs.mount(FS.FORMAT, cb); // 首次挂载需使用 FORMAT 格式化 Filer.path.normalize(/a/b/); // → /a/b Filer 模拟的是POSIX 风格的文件系统根目录是/而不是C:\process.cwd()在浏览器中恒为/。这正是Filer.path与 Node 原生path模块存在差异的原因。相关源码src/index.js、src/path.js二、Filer.path 独有方法速查表Filer.path以 Node 的path-browserify为基底额外打上了 4 处浏览器补丁。前两个方法是重写后两个是新增方法输入示例输出示例作用basename(path)basename(/)/重写根目录返回/而非空字符串normalize(path)normalize(/a/b/)/a/b重写规范化后不保留尾斜杠根目录除外isNull(path)isNull(/a\0b)true新增检测路径中是否含 null 字节\0addTrailing(path)addTrailing(/dir/)/dir/新增追加尾斜杠且不会叠成//removeTrailing(path)removeTrailing(/a//)/a新增去掉所有尾斜杠空串时返回/完整实现见 src/path.js#L18-L47仅 30 行左右可直接读懂。这些方法在 Filer 内部用在哪isNull()文件系统接口在处理任何路径前先拦截 null 字节防止非法路径注入 —— 见 src/filesystem/interface.js#L87 和监听模块 src/fs-watcher.js#L32removeTrailing()/addTrailing()Shell 命令如cd、ls统一用它们处理尾斜杠保证/dir/和/dir行为一致 —— 见 src/shell/shell.js#L487尾斜杠行为的测试用例可参考 tests/spec/trailing-slashes.spec.js。 记忆口诀addTrailing只加一个/removeTrailing清干净但保底给/。三、errno 错误码完整清单Filer 的错误统一定义在 src/errors.js通过Filer.Errors暴露。每个错误码有两种访问方式按名称Filer.Errors.ENOENT或按数字Filer.Errors[34]。Node 兼容错误码3–59按需启用Filer 只启用了实际会用到的 12 个 Node 错误码errno错误名默认信息典型场景3EACCESpermission denied权限不足9EBADFbad file descriptorfd 无效已关闭10EBUSYresource busy or locked资源被占用18EINVALinvalid argument参数非法27ENOTDIRnot a directory把文件当目录用28EISDIRillegal operation on a directory对目录做了文件操作34ENOENTno such file or directory路径不存在最常见47EEXISTfile already exists重名冲突50EPERMoperation not permitted操作不被允许51ELOOPtoo many symbolic links encountered符号链接成环53ENOTEMPTYdirectory not empty删除非空目录55EIOi/o error底层 I/O 错误注errno 30 和 43 按 node-errno 惯例跳过不定义任何错误。Filer 专属错误码1000这 3 个错误码是浏览器文件系统独有的遇到它们通常意味着挂载方式不对errno错误名默认信息解决办法1000ENOTMOUNTEDnot mounted先调用fs.mount()再操作1001EFILESYSTEMERRORmissing super node首次挂载时使用FS.FORMAT格式化1002ENOATTRattribute does not exist扩展属性xattr不存在源码位置src/errors.js#L71-L73四、如何捕获与判断错误错误对象携带name、code、errno、message、可选的path五个字段toString()会把路径一并输出例如ENOENT: no such file or directory, /this/is/the/path推荐的两种判断方式fs.readFile(/missing, function(err, data) { // 方式一instanceof 精确判断 if (err instanceof Filer.Errors.ENOENT) { /* 文件不存在 */ } // 方式二字段判断回调中 err 已自动携带 code/errno if (err err.code ENOENT) { /* ... */ } });自己抛错也很简单new Filer.Errors.EEXIST(自定义信息, /path)第二个参数是出错路径会出现在日志里。全部行为的官方测试在 tests/spec/errors.spec.js错误产生的位置集中在 src/filesystem/implementation.js。五、新手常见报错排查清单遇到报错先查这张表覆盖 90% 的场景 ✅报错一句话诊断ENOENT路径拼写错了或父目录不存在需先mkdir -pENOTMOUNTED忘记fs.mount()或挂载被卸载EFILESYSTEMERROR空盘首次使用挂载时加FS.FORMATELOOP符号链接指向了自己或互相引用见 tests/spec/path-resolution.spec.jsENOTEMPTYrmdir不能删非空目录改用rm -rENOATTR读取的扩展属性从未写入过六、延伸阅读路径规范化与符号链接解析测试tests/spec/path-resolution.spec.jsShell 命令cd/ls的路径处理src/shell/shell.js项目使用示例tests/spec/readme.example.spec.js掌握以上内容你就拥有了 Filer 路径处理与错误处理的完整工具箱路径交给Filer.path的五板斧报错交给Filer.Errors的错误码对照表。【免费下载链接】filerNode-like file system for browsers项目地址: https://gitcode.com/gh_mirrors/fi/filer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表