2017-05-11 10 views
-1

私はExpressでルーティングしています。私のアプリはすべてのコントローラーをロードし、各コントローラーは複数のアクションを実行します。しかし、私のコントローラでは、Expressのルータはちょうどより具体について/インデックス/ action1234Express.JSでマルチアクションのコントローラ?


を得ることができない他のすべて

と私のコントローラとエラーにデフォルトのアクションをロードし、これは私のコードです。

var express = require('express'); 
var router = express.Router(); 
router.get('/', function(req, res) { 
    res.send("index/index"); 
}); 
router.get('/:action', function(req, res) { 
    res.send("index/"+req.params.action); 
}); 
module.exports = router; 

index.js app.js

fs.readdirSync('./controllers').forEach(function (file) { 
    if(file.substr(-3) == '.js') { 
     app.use(require('./controllers/' + file)); 
    } 
}); 


コントローラでルート私はコントローラに「アプリ」のparamを渡し、ルータモジュールの代わりにこれを使用する必要がありますか?
ありがとう

+0

ハム....実際にアプリのハンドル '/ action1234'ではなく、' /インデックス/ action1234' – mJehanno

+0

はい、私のミスは、ルータをネストされていないということです。 – carboncrystal

+0

'app.use(require( './ controllers/+ file));の最初の引数に'/index'を入れることはできますが、それはあなたのすべてのあなたのルートでやるか、コントローラのディレクトリにあるファイルと同じ順序で配列内をルーティングし、それを反復処理します。しかし、コントローラを作成するたびにこの配列を埋める必要があることを意味します。 – mJehanno

答えて

0

私はすべてのコントローラをロードするときにパスのパラメータを置くことで私の問題を解決しました。

fs.readdirSync('./controllers').forEach(function (file) { 
    if(file.substr(-3) == '.js') { 
     app.use('/'+file.substr(0, file.length - 3), require('./controllers/' + file)); 
    } 
}); 

おかげ