2016-08-21 78 views
0

我的目錄結構如下東西:的NodeJS獲取路徑

app/ 
    server/ 
     api/ 
      user/ 
       controller.js 

    images/ 
    image1.jpeg 

問題是controller.js內閱讀image1.jpeg時,我不得不用這樣的

var imagePath = __dirname + '/../../../images/images1.jpeg'; 
fs.readFile(imagePath,().... 

字符串現在以上作品FINE。然而我不喜歡的是這個字符串'/../../../'

有沒有更好的方式來訪問圖像/文件夾中的文件?

回答

0

我使用一個名爲node-app-root-path的NPM模塊幫我申請的NodeJS內管理我的路徑。

參見: https://github.com/inxilpro/node-app-root-path

要獲取應用程序的根路徑,你會做require('app-root-path');

例子:

global.appRoot = require('app-root-path'); 
var imagePath = global.appRoot.resolve('server/images'); 
var img1 = imagePath + '/image1.jpeg'; 

fs.readFile(img1,().... 

不知道是否是一個好主意或沒有,但這種情況下,我已經存儲了爲approot作爲全局變量,這是如此,這將是可用之內的任何地方我NodeJS應用程序堆棧,甚至是我的一些其他NodeJs庫。

在他們的文檔中有許多其他用法,請看看它是否對您有幫助。

1

缺少將路徑傳遞給控制器​​app/images,這與您可以做的一樣好。

你可以遍歷module.parent引用,直到module.parent沒有設置,如果你可以放心地瞭解您的主腳本是假設。例如,如果你的主腳本里面app.jsapp/,你可以這樣做:

var path = require('path'); 
var topLevel = module; 
while (topLevel.parent) 
    topLevel = topLevel.parent; 
topLevel = path.dirname(topLevel.filename); 

var imagesBasePath = path.join(topLevel, 'images'); 

// ... 

fs.readFile(path.join(imagesBasePath, 'images1.jpeg'), ...); 
1

你可以使用path.relative。您可能希望將這些保存爲常量,但您可以執行以下操作使事情更具可讀性。

從當前目錄傳遞到當前目錄的路徑作爲第一個參數和圖像本身的路徑(在本例中爲app),它將返回從當前目錄到圖像的相對路徑。

// returns '/../../../images/images1.jpeg' 
var relativePathToImage = path.relative(
    '/app/server/api/user',   
    '/app/images/images1.jpeg'); 

var pathToImage = __dirname + relativePathToImage;