2011-11-14 9 views
1

NPMパッケージを開発中です。アプリケーションルートからモジュールを要求する必要があります。これを、ユーザーがアプリケーションルートに配置するプロパティーモジュールを必要とするパッケージと考えてください。NPM - アプリケーションのルートへのパス

アプリケーションのルートへのパスを取得するにはどうすればよいですか?

UPDATE:パラメータとしてappを取得します

app.use(express.router(myNPMModule.router)); 

ルータ機能:

私がやろうとしています何を要約すると、急行は、あなたがこのような何かを行うことができます。アイデアは、ユーザーが別々のファイルにルートを指定できるようにすることであり、コントローラーを/controllersフォルダーに置くなどの特定の規則に従う必要があり、モジュールがパスを動的に解析して正しい方法を呼び出すことができるようになります正しいモジュールで私はすでに動作していますが、NPMでパッケージ化すると、アプリケーションのパスにアクセスできなくなるため、コントローラモジュールのメソッドを動的に呼び出すことはできません。

+0

代わりに、ユーザーがプロパティで「コンストラクタ」(またはあなたが持つ機能)を呼び出させるようにしてはいけません。 – alessioalex

+0

他の回答に私のコメントを見てください。私はルーターを書いていますが、ユーザーが特定の規則に従うことを期待しています。コントローラーを "controllers/moduleName.js"に入れて、URLに基​​づいて正しいコントローラーとメソッドを呼び出すことができます。 – jeffreyveon

+0

私が書いたnpm [rainbow](https://npmjs.org/package/rainbow)を試してみてください。これは、コントローラのファイルパスにURLをマッピングするための要件と同じルータミドルウェアです。 – mytharcher

答えて

3

ユーザーが変数を設定する関数を呼び出してください:次に、ユーザーが自分のルートの設定を必要とし、それをあなたのモジュールを初期化することができます

myModule.setProps(json) 
    OR 
    myModule = new MyModule(json) 

を。編集した質問に対して

アップデート:私は、これはあなたがやろうとしている正確に何であると考えてい

var routes = require('./routes') 
app.get('/info', routes.info); 

//Routes Module 
exports.info = function(req, res) { 
    res.render('info', {title: 'Express'}) 
}; 

Expressは、次のようなルートを定義することができます。そうじゃない?

アップデート2:

あなたは__dirname

console.log(__dirname); 
+0

私はそれを考慮しましたが、私はユーザーモジュールを動的にロードできる必要がある場合もあります(たとえば、特定のコントローラに要求をルーティングする場合)。これを行うための他の方法はありますか?私のモジュールが私のnode_modules/moduleName/libフォルダにあると仮定して、比較的アクセスしようとしていますか? – jeffreyveon

+0

プログラムの実行中に動的にモジュールが変更される可能性がありますか?またはプログラムの起動時に設定ファイルをロードするときと同じように動的に実行します。 –

+0

私は詳細を質問で更新しました。ユーザがURLを入力すると、私のモジュールはURLを解釈し(規約に則ったレールに基づいて)、コントローラモジュールの適切なメソッドを呼び出します。コントローラモジュールの場所は規約に従います。 – jeffreyveon

1

私は同じ質問を持っているを使用して、現在実行中のスクリプトがあるディレクトリを見つけることができます。

そして私はこの環境変数ヘルプを見つけることができます。

process.env.PWD 

それは常にそれが実行しているアプリケーションのパスのルートを指します。

+1

私に未定義の値を与えます... -1 –

1

これを試してください。

var path = require('path'); 
console.log(path.dirname(module.parent.filename)); 
関連する問題