Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Node.js中获取应用程序完整路径_Node.js - Fatal编程技术网

在Node.js中获取应用程序完整路径

在Node.js中获取应用程序完整路径,node.js,Node.js,我想知道在Node.js中是否有获得应用程序完整路径的最佳方法或最佳实践。示例:我在子文件夹/apps/myapp/data/models/mymodel.js中有一个a模块,我想获取应用程序的完整路径(不是文件的完整路径),它将返回我/apps/myapp,我该怎么做?我知道\u dirname或\u file仅与文件本身相关,而不是应用程序的完整路径。可能有一个更好的解决方案,但这应该可以: var path = require('path'); // find the first mod

我想知道在Node.js中是否有获得应用程序完整路径的最佳方法或最佳实践。示例:我在子文件夹/apps/myapp/data/models/mymodel.js中有一个a模块,我想获取应用程序的完整路径(不是文件的完整路径),它将返回我/apps/myapp,我该怎么做?我知道\u dirname\u file仅与文件本身相关,而不是应用程序的完整路径。

可能有一个更好的解决方案,但这应该可以:

var path = require('path');

// find the first module to be loaded
var topModule = module;

while(topModule.parent)
  topModule = topModule.parent;

var appDir = path.dirname(topModule.filename);
console.log(appDir);
编辑:安德烈亚斯在评论中提出了更好的解决方案:

path.dirname(require.main.filename)
编辑:Nam Nguyen的另一个解决方案

path.dirname(process.mainModule.filename)

这对我很有用。。主管从不同的目录运行应用程序

require('path').dirname(Object.keys(require.cache)[0])
例如。。文件夹: /desktop/ya/node.js

  require('./ya2/submodule')();
/desktop/ya/ya2/submodule.js

module.exports = function(){
    console.log(require('path').dirname(Object.keys(require.cache)[0]))
}

$ node node.js  
       => /desktop/ya

$ (from /desktop) supervisor ya/node.js
       => /desktop/ya

求爱。。我没想到会这么复杂,但我会尝试一下,谢谢。
path.dirname(require.main.filename)
应该做同样的事情。请注意,如果您通过另一个应用程序(pm2、forever或mocha是常见情况)运行该应用程序,则此(以及OP)解决方案将失败。如果您希望将其转换为一个函数,并将其放在单个位置(例如
common.js
),则会出现一个问题:您需要知道
common.js
(相对于当前文件)的位置这样您就可以使用
require('common.js')
。实际上,
\uu dirname
永远无法很好地解决这个问题。我认为在nodejs应用程序中,文件应该知道它们在哪里,根本不需要根路径.yeup,console.log(require('path').dirname(require.main.filename));作品谢谢大家!我还找到了另一个解决方案:require('path').dirname(process.mainModule.filename)我还找到了另一个解决方案:require('path').dirname(process.mainModule.filename)我找到了自己的答案:path.dirname(process.mainModule.filename)