2017-03-02 11 views
0

ramlファイルに基づいて要求を検証するためにミドルウェアを使用したいと考えています。Expressjs - ミドルウェアをミドルウェア内で使用する

// require 
let resources = require('osprey-resources'); 
let errorHandler = require('request-error-handler'); 
let handler = require('osprey-method-handler'); 

// create express instance 
let app = express(); 

// ramlObj obtained by raml2obj.parse(myPath).then() 
let router = resources(ramlObj.resources, 
    function (method, path) { 

     // get the method type : get/post/etc 
     let methodType = method.method.toUpperCase(); 

     // provide a function (controller) for this path 
     return controllers.provideController(methodType, path); 
    } 
); 

// osprey-router middelware , created by osprey-resources 
app.use('/v1', router); 

// error Handler middelware 
app.use(errorHandler(responder, DEFAULT_LANGUAGE, customMessages)); 

// What I want: 

// routes middelware 
app.use('/v1', custom_middleware(method, methodType, path), router); 

私は彼に提供されたすべてのパラメータを持つ内部custom_middleware使用osprey-method-handler:私のコードがどのように見えるか
。 私はあなたがreqresnextがあなたのcustom_middleware関数に送信されるように部分関数を使用する必要があなたの例のために成功

答えて

0

せずに接続しようとしました。

lodash使用例:あなたの答えのための

// Route 
app.use('/v1', _.partialRight(custom_middleware, method, methodType, path), router); 

// Function 
custom_middleware(req, res, next, method, methodType, path) { 
    ... 
} 
+0

感謝を。私はロダッシュが関数型プログラミングには優れていることを知っているので、試してみましょう。 – jy95

+0

ちょっと質問、osprey-method-handlerはそのコードのnext()コールの中で使用します。したがって、custom_middlewareがnext()を実行する必要はありませんが(osprey-method-handlerに依存していれば)どうなりますか? – jy95

+0

ちょうどテストしました...、osprey-method-handlerの結果を受け取っていないと、次のミドルウェア(ルータ)は動作しません.... – jy95

関連する問題