node.js - Node js/Express js 相对路径(点或 __dirname 或不带任何前缀)?

标签 node.js express

我正在查看 Nodejs/expressjs,并且看到不同的教程使用 __diranme + "/my_folder""./my_folder" 或仅使用 “我的文件夹”.

例子:

app.use("/static", express.static(__dirname + "/my_folder"));
app.use("/static", express.static("./my_folder"));
app.use("/static", express.static("my_folder"));

我都试过了,它们似乎都有效;相对路径应该使用哪一个?

我也见过 require('./my_file.js')require('my_file')。有区别吗?我应该使用什么?

最佳答案

几乎所有将文件路径作为参数的函数(除了 require),都会在某一时刻使用 fs 模块中的函数来读取或写入它们.

Node.js documentation for fs module说:

Relative path to filename can be used, remember however that this path will be relative to process.cwd().

当您考虑这一点时,要使这些函数的行为有所不同,将需要很大的技巧。毕竟,fs 函数是常规的 Javascript,它们没有特殊的访问权限来获取调用者的信息。他们唯一可以访问的 __dirname 是他们自己的模块(核心 fs 模块)的 __dirname

require 函数 可以解析相对于当前 __dirname 的路径,而无需明确指定,这是因为 require 是它出现的每个文件的唯一函数。这样,​​它可以访问当前模块的细节,尤其是它的路径。

您的代码恰好可以工作的原因是,目前,上面出现的 app.js(或类似代码)恰好与 process.cwd( ) 目前是。 IE。使用 node app.js 启动应用程序会起作用,而使用 node myappdir/app.js 启动应用程序(从其父目录运行)则不会。 process.cwd() 会有所不同。

只要您记住相对路径将通过 process.cwd() 解析,那么您可以使用更短的语法。在某些情况下,它可能是一个优势。它确实使您的代码依赖于它的调用方式。我个人更喜欢使用 __dirname,因为它对于正在发生的事情更加透明,并且相对路径与您在同一文件的 require 语句中使用的路径一致。

关于node.js - Node js/Express js 相对路径(点或 __dirname 或不带任何前缀)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16727045/

相关文章:

node.js - 用于 Express 的 mustache (类)模板引擎?

javascript - 在 express 之外的脚本中从 express 应用程序导入模块时出现问题

javascript - ejs模板引擎数据渲染错误

node.js - 最新的 npm 版本在 Linux 中不起作用

javascript - 在JavaScript函数中为Discord RPC使用变量

javascript - 如何验证 Node.js 和 Express 中应该相等的两个字段?

node.js - 无法让 Node 检查器工作

node.js - 在 Google Cloud App Engine 上部署 Angular Universal 应用程序时出错

javascript - 从回调结果中填充一个变量?

node.js - 如何记住客户的数据?