来自NodeJS中模块的应用程序基本路径

时间:2014-02-07 20:25:02

标签: node.js module path fs

我正在NodeJS中构建一个Web应用程序,我正在单独的模块中实现我的API路由。在我的一个路由中,我正在进行一些文件操作,我需要知道基本应用程序路径。如果我使用__dirname,它会给我一个包含我的模块的目录。

我目前正在使用它来获取基本应用程序路径(假设我知道从基本路径到模块的相对路径):

path.join(__dirname, "../../", myfilename)

有没有比使用../../更好的方法?我在Windows下运行Node,因此没有process.env.PWD,我也不想成为平台特定的。

3 个答案:

答案 0 :(得分:20)

使用__dirname的方法是最可靠的方法。它总是会给你正确的目录。您不必担心Windows环境中的../../因为path.join()会处理此问题。

但是有另一种解决方案。您可以使用process.cwd()返回进程的当前工作目录。如果从基本应用程序目录执行节点应用程序,那么该命令可以正常工作。但是,如果您从其他目录执行节点应用程序,例如,其父目录(例如node yourapp\index.js),那么__dirname机制将更好地工作。

我希望这会有所帮助。

答案 1 :(得分:3)

您可以使用不带参数的path.resolve()来获取通常是基本应用程序路径的工作目录。如果参数是相对路径,那么它被假定为相对于当前工作目录,因此您可以编写

require(path.resolve(myfilename));

要求你的模块在app root。

答案 2 :(得分:0)

您可以像在app.js中那样定义全局变量:

global.__basedir = __dirname;

然后,您可以在任何地方使用此全局变量。像这样:

var base_path = __basedir