ENOENT,fs.mkdirSync上没有这样的文件或目录

时间:2015-02-13 11:11:14

标签: node.js

我目前正在启动我的NodeJS应用程序,并且我有以下if语句:

Error: ENOENT, no such file or directory './realworks/objects/'
    at Object.fs.mkdirSync (fs.js:654:18)
    at Object.module.exports.StartScript (/home/nodeusr/huizenier.nl/realworks.js:294:7)

但奇怪的是,该文件夹已存在,但检查在以下代码段上失败:

if(fs.existsSync(objectPath)) {
    var existingObjects = fs.readdirSync(objectPath);
    existingObjects.forEach(function (objectFile) {
        var object = JSON.parse(fs.readFileSync(objectPath+objectFile));
        actualObjects[object.ObjectCode] = object;
    });
}else{
    fs.mkdirSync(objectPath); // << this is line 294
}

我无法理解在创建目录时如何发生no such file or directory

10 个答案:

答案 0 :(得分:5)

缺少指定路径上的任何文件夹时,mkdir将抛出ENOENT

有2种可能的解决方案(不使用第三方包装):

  • 对路径中每个不存在的目录递归调用fs.mkdir
  • 使用在 v10.12 中引入的recursive选项:
    fs.mkdir('./path/to/dir', {recursive: true}, err => {})

答案 1 :(得分:3)

以下对我有用:

fs.mkdir( __dirname + '/realworks/', err => {})

答案 2 :(得分:0)

问题是由forever相对于调用forever start命令的工作目录运行应用程序引起的,而不是应用程序入口点的位置。

答案 3 :(得分:0)

尝试:

fs.mkdir('./realworks/', err => {})

答案 4 :(得分:0)

发生此错误的原因是,如果在给fs.mkdir或fs.mkdirSync的路径中存在任何文件夹,则这些方法将抛出/回调,并带有ENOENT错误。

答案 5 :(得分:0)

使用localeChangeWrong: fs.writeFile(...) Correct: fs.writeFileSync(...) 时,必须通过fs.mkdirfs.mkdirSyncfolder1/folder2/folder3之类的路径,否则会出现上述错误

答案 6 :(得分:0)

在这里How to create full path with node's fs.mkdirSync?

NodeJS 10.12.0版本添加了对mkdir和mkdirSync的本机支持,以使用以下递归:true选项来递归创建目录:

fs.mkdirSync(targetDir, { recursive: true });

如果您更喜欢fs Promises API,则可以编写

fs.promises.mkdir(targetDir, { recursive: true });

答案 7 :(得分:0)

ENOENT在linux documentation中的描述如下:

  

没有这样的文件或目录(POSIX.1-2001)。

     

通常,当指定路径-                          名称不存在,或者名称中的组件之一                          路径名的目录前缀不存在,或者                          指定的路径名​​是悬空的符号链接。

ENOENT的另一个可能原因是您没有足够的权限来创建目录。

这是在构建docker映像时发生的,我没有足够的权限在当前WORKDIR中创建子文件夹。使用--chown=user:usergroup更改文件夹的所有者,或将伪指令的USER更改为root用户都是解决此问题的有效方法。

答案 8 :(得分:0)

对我有用的是

  1. 删除我的yarn.lock,package-lock.json和nodemodules
  2. 使用yarn build重新安装
  3. 重新启动本地服务器

答案 9 :(得分:-1)

所以...您可能正在使用 ubuntu 终端来创建您的 React 应用程序。

碰巧我正在测试windows最近启动的ubuntu终端,安装在windows电脑上,就像一个虚拟机,但实际上没那么乱。

我碰巧遇到了和你们一样的错误,在测试了社区之前提供的所有选项后,它们都不起作用。但是,我确实为我的问题找到了解决方案。它给了我 ENOENT 错误,例如找不到测试文件或目录。但我确实在那里。我正在使用 npm start,并想出了使用 sudo npm start 的想法......并且它奏效了。