2016-12-06 6 views
3

私はNode/Expressを初めて使いました。これは簡単な質問ですが、論理/理解が妥当ではないとは思えません。ここで単一の.jsファイル内のエクスプレスルート

は私のアプリの構造を簡略化したバージョンです:

/app 
    /routes 
    filter.js 
    index.js 
    app.js 

私はこのように私app.jsファイルで定義された私のルートを持っています。

// app.js 

app.use('/', require('./routes/index')); 
app.use('/filterone', require('./routes/filter')); 
app.use('/filtertwo', require('./routes/filter')); 

私は両方/filteroneと私のfilter.jsへ/filtertwoルートからのトラフィックを指すようにして、ルートで、私はこのようにそれらを処理したいと思いたい:

// filter.js 

router.get('/filterone', function(req, res, next) { 
    // do something 
} 

router.get('/filtertwo', function(req, res, next) { 
    // do something 
} 

これを実行する正しい方法はありますか?または私は私のルートを別々に扱うべきですか?

答えて

2

私はあなたが達成しようとしていることを達成するコードを信じていません。あなたが行うと:

app.use('/filterone', require('./routes/filter')); 

をあなたは'/filterone'事前に追加して、アプリケーションのルートにfilter.jsで定義したルートを追加しています。フィルタ'/filterone'を定義しているので(これはfilter.jsにあったと仮定しています)これは、/filterone/filteroneを照会する必要があるルートにアクセスすることを意味します。

Andreas Rauの回答はうまくいくでしょうが、複数のルートファイルが必要な場合は、1つの小さな追加をすることができます。

//app.js 

const express = require('express'), 
     index = require('./routes/index') 
     filters = require('./routes/filter'), 
     app = express(); 

app.use('/', index); 
app.use('/filter', filters); 

この方法で、/filter/route_nameでフィルタのルートにアクセスできます。これにより、別々のルートファイルを別のルートファイルに置いていれば、同じものを呼び出すことができます。たとえば、フィルタを表示してインデックスに何かを表示することができます。この方法で、それぞれのファイルに表示することができます。インデックスの表示ルートは/show、フィルタの表示ルートは/filter/showです。ここで

編集*あなたのルートのアンドレアス・ラウの回答に基づいてファイルのとsubroutesを使用するための例です:

routes/filter.js

const express = require('express'), 
     router = express.Router(); 

router.get('/show',(req,res) => { 
//handle /filter/show 
}); 


router.get('/filterone',(req,res) => { 
//handle /filter/filterone 
}); 

router.get('/filtertwo',(req,res) => { 
//handle /filter/filtertwo 
}); 

module.exports = router; 

routes/index.js

const express = require('express'), 
     router = express.Router(); 

router.get('/show',(req,res) => { 
//handle /show 
}); 

module.exports = router; 
+0

私は私のフィルタで複数​​のルートを占めるだろうか。 jsファイル? – knoll

+0

私は私の質問に例を追加しました。 – morsecodist

+0

ああ、今それは理にかなっています。ありがとう! – knoll

0

//filter.js 
 

 
const express = require('express'), 
 
     router = express.Router(); 
 

 
router.get('/',(req,res) => { 
 
//code... 
 
}); 
 

 

 
router.get('/filterone',(req,res) => { 
 
//code... 
 
}); 
 

 
router.get('/filtertwo',(req,res) => { 
 
//code... 
 
}); 
 

 
module.exports = router;

今、あなたはあなたのapp.jsコードでそれを使用することができます。

//filter.js 
 

 
const express = require('express'), 
 
     router = require('./route/filter'), 
 
     app = express(); 
 

 
app.use('/',router);

EDIT: あなたはちょうどこのように複数のルータを使用することができます基本パス(app.useの最初のパラメータ)を変更する必要があります! したがって、基本的にインデックスルータ、フィルタルータールータなどを作成できます。

0

あなたfilteroneの両方とfiltertwoはフィルタのサブルートに似ていますので、アプリでは次のもののみが必要です:

app.use('/filter', require('./routes/filter')); 

、あなたのルートフォルダ内に、あなたはfilter.jsファイルを作成し、ルートをスラムますが

は例をfilter.js:

var express= require('express'); 
var router = express.Router(); 

//optional if you want to use controllers or not 
var controller = require('path to controller') 

//in case of controllers 
router.get('/filterone', controller.funcToTakeCareOfFilterone); 
router.get('/filtertwo', controller.funcToTakeCareOfFiltertwo); 

//in case of no controllers 
router.get('/filterone', function(req, res , next) { 
    //your code 
}); 
router.get('/filtertwo', function(req, res , next) { 
//your code 
}); 

module.exports = router; 
+0

この方法を試してみると、両方のルートで404が得られます。 – knoll

関連する問題