我正在NodeJS中构建一个Web应用程序,我正在单独的模块中实现我的API路由。在我的一个路由中,我正在进行一些文件操作,我需要知道基本应用程序路径。如果我使用__dirname
,它会给我一个包含我的模块的目录。
我目前正在使用它来获取基本应用程序路径(假设我知道从基本路径到模块的相对路径):
path.join(__dirname, "../../", myfilename)
有没有比使用../../
更好的方法?我在Windows下运行Node,因此没有process.env.PWD
,我也不想成为平台特定的。
答案 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