2016-08-21 11 views
0

私のディレクトリ構造は以下のようなものです:取得パスが

app/ 
    server/ 
     api/ 
      user/ 
       controller.js 

    images/ 
    image1.jpeg 

問題controller.js内image1.jpegを読んだとき、私は今

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

のような文字列を使用する必要があります上記の作品はFINEです。しかし、私は好きではないこの文字列 '/../../../'

画像/フォルダ内のファイルにアクセスするより良い方法はありますか?

答えて

0

参照: 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参照を横断することができます。あなたはpath.relativeを使用することができ

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

:あなたの主なスクリプトがapp/内部app.jsある場合たとえば、あなたのような何かを行うことができます。おそらくこれを定数として保存したいと思うかもしれませんが、読みやすくするために次のことができます。

現在のディレクトリへのパスを最初のパラメータとして渡し、同じ親ディレクトリ(この場合はapp)からの画像自体へのパスを渡し、現在のディレクトリから画像への相対パスを返します。私は私がNodeJSアプリケーション内で私のパスを管理するのに役立つnode-app-root-pathと呼ばれるNPMモジュールを使用

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

var pathToImage = __dirname + relativePathToImage; 
関連する問題