2016-10-21 15 views
0

私は:id/comments/:id/otherRouteなどのルートを持っています。 これらのルートでは、新しいコントローラを作成する必要があります。たとえば :Param as router - ExpressJS

let id: number = +req.params["id"]; 
new controller(id).getComments().then(comments => { 
    res.json(response("error", {comments: comments})) 
}).catch((error) => { 
    res.json(response("error", {error: error})) 
}) 

ルート:id/のための新しいルータを使用して、すべてのルートのためのグローバルcontrollerを作成する方法はありますか?例えば、IDのPARAM:あなたが必要なもの

答えて

2

は、あなたが持っているすべてのルートのためllogicを行うことができますので、ミドルウェアを作ることです

app.use('/something/:id', (req, res, next) => { 
    //some code logic 
    //error handling 
    if(error){ next(error); } 
    else { next(); } 
}); 

魔女でのparamミドルウェアを使用する可能性もありますあなたはPARAMとものを行うことができます。

app.param('id', (req, res, next, id) => { 
    somefunction() 
    .then(() => { 
     //some logic with param.id 
     next(); 
    }) 
    .catch((error) => { 
     next(error); 
    }); 
}); 

あなたは、このリンクでミドルウェアについての詳細を見ることができます:express middlewares

+0

はあなたにたくさんありがとうございました! :) –

+0

ミドルウェアから変数に変数を渡す方法を教えてください。私は 'next()'のパラメータとして渡そうとしていましたが、私はどのように経路からそれにアクセスするのか分かりません。 –

+0

次のコールバックは、エラーハンドリングミドルウェアに次のようなエラーがあった場合(エラー)、次のミドルウェアに渡す場合のみです:next()。変数をルートに戻すことはできません.req.param.idで操作するだけです。このようにして、最終的なコントローラーでそれを取り上げるときに変更が適用されます。オブジェクトreqは永続的です。 – sendra