Node.js,无法打开文件。错误:ENOENT,状态为“ ./path/to/file”


126

我已经在计算机上使用express框架开发了一个node.js程序,该程序运行良好,没有任何抱怨。

但是,当我在打算用于SUSE Studio设备的程序上运行该程序时,任何文件交互都会收到错误消息。

Error: ENOENT, stat './path/to/file'

我检查了文件权限是否正确。如果这很重要,我的计算机和设备正在运行不同版本的节点。

有什么想法吗?


1
由于路径是相对的,也许您是从其他目录运行它?您如何生成路径以及目录结构是什么?以及您如何运行节点?
loganfsmyth 2012年

1
谢谢,是的,我是从另一个目录运行脚本的,并且愚蠢地认为文件路径是脚本本身的相对路径。我知道这很简单:)

它应该是可修复的。您是否可以添加一些代码来显示路径的制作方式以及预期的解析方式?如果您希望它相对于特定文件,通常您会这样做__dirname + 'path/to/file';
loganfsmyth 2012年

是的,那就是我现在所做的。我正在通过执行“ node〜/ path / to / script.js”并希望脚本中文件的相对引用解析为“〜/ path / to”来运行脚本,谢谢!

Answers:


187

用a指定的路径.是相对于当前工作目录的,而不是相对于脚本文件的。因此,如果您运行该文件可能会找到,node app.js但如果运行则找不到node folder/app.js。唯一的例外是require('./file')并且这是唯一可能的,因为require每个模块都存在,因此知道从哪个模块调用。

要创建相对于脚本的路径,必须使用__dirname变量。

var path = require('path');

path.join(__dirname, 'path/to/file')

或潜在地

path.join(__dirname, 'path', 'to', 'file')

11
谢谢; 有时候,对于新手(例如我!)来说,在文档中很难找到这样的小东西。

5

这是使用您的app.js的代码

输入指定文件名

res.download(__dirname+'/'+input);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.