2012-11-21 75 views
4

比方說,我有這樣的目錄結構的NodeJS READDIR和要求相對路徑

/Project 
    /node_modules 
     /SomeModule 
     bar.js 
    /config 
     /file.json 
    foo.js 

-

foo.js: 
require('bar'); 

-

bar.js: 
fs.readdir('./config'); // returns ['file.json'] 
var file = require('../../../config/file.json'); 

是不是該readdir的工作從文件被包括(foo.js)並且需要來自被稱爲(bar.js)的文件的作品?

或者我錯過了什麼? 謝謝

+8

'fs.readdir()根據'process.cwd('解釋相對路徑)'而'require()'根據'__dirname'解釋相對路徑。 –

回答

7

由於Dan D.表示,fs.readdir使用process.cwd()爲起點,而require()使用__dirname。如果你願意,你總是可以解決從一個路徑到另一個,得到一個絕對路徑都將其解釋以同樣的方式,像這樣:

var path = require('path'); 
route = path.resolve(process.cwd(), route); 

這樣,如果使用__dirname作爲起點,它將忽略process.cwd (),否則將使用它來生成完整的路徑

asume process.cwd() == '/home/usr/node/' 
if route == './directory' it would become '/home/usr/node/directory' 
if route == '/home/usr/node/directory' it will be left as is 

我希望它爲你工作:d

+0

此代碼很難遵循。 「路線」在哪裏定義?你有更好的方式表達'fs.readdir(path.join(__ dirname,'./path/',cb)'? – chharvey

+0

'route'就是你想要打開的(在你的情況下它會是'./你可以總是使用'readdirSync'來避免使用回調,並且在'./path/'後面缺少一個')' –