2016-06-23 4 views
0

私はエクスプレス4.0を使用しており、ミドルウェアをチェーンするのに問題があります。私は2つのルーターを持っています:ジョブルーターとリクルータールーター。 現時点ではすべてうまく動作しています(私はこれらのルータの両方でCRUDを使用できます)が、募集ルータを使用してメソッドを呼び出すためのPOSTメソッドが必要で、これを実現する方法がわかりません。ルータを使ってミドルウェアをチェーンする方法

ルータ/ recruiter.js:

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

/* GET recruiters listing. */ 
router.get('/', function(req, res, next) { 
    var recruiters = []; 
    //get recruiters 
     res.json(recruiters); 
}); 

function(err, req, res, next) { 
    console.info("pseudo code for a function I'd like to call in the job.js file"); 
}); 

module.exports = router; 

ルータ/ job.js:

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

var jobs = []; 

/* GET job listing. */ 
router.get('/', function(req, res, next) { 
    jobs = []; 
    //get jobs 
    res.json(jobs); 
}); 

/* add jobs . */ 
router.post('/', function(req, res, next) { 
    console.info('add job', req.body); 

    var body = req.body; 
    //I omit the parts where I check the req and save the object 


    //At the moment I do this but I'd like to call a method within the recruiter router before sending the json back to the client. 
    res.json({'jobs': []}); 
}); 

module.exports = router; 

、ここではapp.jsで関連部品です:

var job = require('./routes/job'); 
var recruiter = require('./routes/recruiter'); 

app.use('/job', job); 
app.use('/recruiter', recruiter); 
+0

呼び出すコードを独自の関数に入れ、その関数を2か所から呼び出します。 2つのルート間で共通のコードを共有するためにExpressインフラストラクチャを使用する必要はありません。共通のコードを共有するには、単純なJSプログラミング手法を使用してください。 – jfriend00

+0

あなたの説明は私の最初の実装でしたが、これを行うにはもっと "明白な"方法が必要であるとわかりました。 –

+1

何らかの未知の理由から、人々は、共有コードを速やかに行うべきであると思うことに悩まされ、これが唯一の方法です。ここに投稿した他の人や、自分のコードを書くときに私が見たような感覚を知っています。しかし、名前付き関数に共通コードを置き、2つの場所から呼び出すことはこれを解決する一般的な方法であり、Expressは実際にはより良い置換を提供しません。 – jfriend00

答えて

1

ターニング私の答えへのコメント...

Expressは、複数のルート間でコードを共有する特別な方法を提供していません。コードをルートハンドラの前に常に実行したい場合は、もちろん、共通のミドルウェア機能を使用することができます。

しかし、2つ以上のルートでルートの実装から共通のコードを実行できるようにコードを分けているのであれば、これは単純なJavascriptの問題です。共通のコードを共有関数に置き、2つ以上のルートからその関数を呼び出します。つまり、他のJavascript関数と同じようにコードをルート間で共有するだけです。 Expressはこれに関して特別なことを必要としません。あなたはいつもJavascriptでそれをやります。

Expressでコーディングする人は、Express用のコードを構造化する方法に巻き込まれ、コードを共有するために通常の共通の共通関数を使用できることを何とか忘れています(私は多くの人がこれは) - コードを共有するための「高速」な方法であることを期待しています。ありません。共通のコードを持つ関数を作成し、複数の場所から呼び出すことで、共通のコードを共有する通常のJavascriptの方法を実行してください。

関連する問題