Node.js 中 fs.renameSync 报错

简介: 问题今天介绍一下在使用 Node.js 编写的服务时遇到的 fs.renameSync 报错问题,一共有两种类型。接下来分别介绍。第一种报错类型:源文件不存在

目录

  • 问题
  • 解决
  • 结尾

问题

今天介绍一下在使用 Node.js 编写的服务时遇到的 fs.renameSync 报错问题,一共有两种类型。接下来分别介绍。

第一种报错类型:源文件不存在

熟悉的小伙伴都知道 fs.renameSync 方法可以重命名文件,在重命名的过程中,可以间接实现移动文件的效果。今天在使用 fs.renameSync 方法重命名文件时,发生了如下报错信息:

<div class="layui-container mt-20">
        <div class="layui-row layui-col-space20">
            <div class="layui-col-md12">
                <h1>ENOENT: no such file or directory, rename './movies/0.doc' -&gt; './movies/0/0.doc0'</h1>
                <h2></h2>
                <pre>Error: ENOENT: no such file or directory, rename './movies/0.doc' -&gt; './movies/0/0.doc0'
    at Object.fs.renameSync (fs.js:766:18)
    at exports.postupload (/root/boffmpeg/controller/admin.js:344:12)
    at Layer.handle [as handle_request] (/root/boffmpeg/node_modules/express/lib/router/layer.js:95:5)
    at next (/root/boffmpeg/node_modules/express/lib/router/route.js:137:13)
    at Array.&lt;anonymous&gt; (/root/boffmpeg/node_modules/multer/lib/make-middleware.js:53:37)
    at listener (/root/boffmpeg/node_modules/on-finished/index.js:169:15)
    at onFinish (/root/boffmpeg/node_modules/on-finished/index.js:100:5)
    at callback (/root/boffmpeg/node_modules/ee-first/index.js:55:10)
    at IncomingMessage.onevent (/root/boffmpeg/node_modules/ee-first/index.js:93:5)
    at emitNone (events.js:111:20)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
    at _combinedTickCallback (internal/process/next_tick.js:139:11)
    at process._tickCallback (internal/process/next_tick.js:181:9)    </pre>
            </div>
        </div>
    </div>

通过报错提示,我们可以非常清晰的知道,报错原因是源文件不存在导致的。

解决方法也非常简单,找到源文件不存在的真实原因就行了,我碰到的原因是因为路径写错了。修改路径后,问题解决。

下面,我们来看第二种报错类型。

第二种报错类型:跨磁盘迁移

0|www  | Error: EXDEV: cross-device link not permitted, rename './public/uploads/0.doc' -> './public/text/6181fed03b908702d75331ce/0.doc'
0|www  |     at Object.fs.renameSync (fs.js:766:18)
0|www  |     at /root/boffmpeg/controller/admin.js:275:16
0|www  |     at /root/boffmpeg/node_modules/mongoose/lib/model.js:4870:16
0|www  |     at /root/boffmpeg/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16
0|www  |     at /root/boffmpeg/node_modules/mongoose/lib/model.js:4893:21
0|www  |     at model.$__save.error (/root/boffmpeg/node_modules/mongoose/lib/model.js:502:7)
0|www  |     at /root/boffmpeg/node_modules/kareem/index.js:316:21
0|www  |     at next (/root/boffmpeg/node_modules/kareem/index.js:210:27)
0|www  |     at /root/boffmpeg/node_modules/kareem/index.js:183:9
0|www  |     at process.nextTick (/root/boffmpeg/node_modules/kareem/index.js:508:38)
0|www  |     at _combinedTickCallback (internal/process/next_tick.js:132:7)
0|www  |     at process._tickCallback (internal/process/next_tick.js:181:9)

报错类型是不允许跨磁盘链接,但是明明两个子目录同属于一个父级目录,这个报错让我非常的不解,我相信实际的原因一定不是因为跨磁盘导致。真实的原因,我以为今天找不到了。

但是,还是被我发现了。原来 fs.renameSync 方法不会自己创建不存在的目录,也就是上面报错的原因是因为子目录 6181fed03b908702d75331ce 创建不出来导致的。

知道这个原因,问题就好解决了,需要单独创建目标文件的相关目录。修改后的代码示例如下:

fs.mkdir('./public/text/'+id, { recursive: true }, (err) => {
if (err) throwerr;
// todo});

结尾

其实也有别的解决方法,比如利用 mv 库完成文件的迁移。具体如何使用 mv 库完成文件的重命名和迁移欢迎关注我后面的文章,今天就先介绍到这里,已经不早了,晚安😴。



作者简介:大家好,我是 liuzhen007,是一位音视频技术爱好者,同时也是CSDN博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!


目录
相关文章
|
2月前
|
JavaScript 前端开发 开发工具
【Azure Developer】使用JavaScript通过SDK进行monitor-query的client认证报错问题
AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found. Check to make sure you have the correct tenant ID and are signing into the correct cloud. Check with your subscription administrator, this may happen if there are no active subscriptions for the tenant.
|
2月前
|
JavaScript 开发工具 git
已安装nodejs但是安装hexo报错
已安装nodejs但是安装hexo报错
32 2
|
2月前
|
JavaScript 前端开发
原生js常见报错及其处理方案
原生js常见报错及其处理方案
22 0
|
4月前
|
JavaScript 前端开发 C++
【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
|
4月前
|
JavaScript
Vue——使用JS文件中的函数ESLint报错未定义
Vue——使用JS文件中的函数ESLint报错未定义
41 0
|
5月前
|
JavaScript
js 捕获 await 的报错
js 捕获 await 的报错
27 1
|
5月前
|
移动开发 运维 JavaScript
阿里云云效操作报错合集之遇到Node.js的内存溢出问题,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5月前
|
JavaScript Shell 应用服务中间件
阿里云云效操作报错合集之Node.js构建报错,该如何排查问题
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5月前
|
资源调度 前端开发 开发工具
阿里云云效操作报错合集之Node-Sass模块在构建过程中,出现报错"ENOENT: no such file or directory, scandir ",该如何处理
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
6月前
|
JavaScript 前端开发 Java
JS经常碰见的报错问题
JS经常碰见的报错问题