2016-06-27 5 views
0

私は現在、このようんルートにあります既存のルートにすべて適用しますか?

app.all('*', passport.authenticate('facebook-token', { session: false })); 

//Here goes specific routes. 

app.get('/user/me', 
    (req, res, next) => { 
     next(); 
}); 

app.get('/user/makeRider', 
    (req, res, next) => { 
     req.user.user.makeRider(req.query) 
      .then((user) => { 
       next(); 
      }); 
    } 
); 

app.all('*', (req, res) => { 
    req.user.user.full().then((fulluser) => { 
     res.json({ 
      user: fulluser, 
      params: req.query 
     }); 
    }); 
}); 

彼らは私のREST-APIの真偽を出力する責任があります。これらのルートの問題は、すべてのルートを有効にし、404:sを投げないことです。すべてのルートに機能を追加することなく、これを実行するより良い方法はありますか?

+0

は、私はすべての有効なルートにいくつかのものをやりたいの – Himmators

+0

ええ、私はそれがあなたが望んだことを理解しました。したがって、ルートハンドラは実際に応答を返さないのですか? – robertklep

+0

現時点ではありませんが、彼らは質問に更新するものを追加します! – Himmators

答えて

1

これは、Expressに共通の設定ではありません(Restifyには、next()という特定のルートにリクエストを転送するオプションがあります。これは出力ハンドラになりますが、その制限もあります)。

可能な回避方法があります。

まず、outputミドルウェア宣言:パスポート・ミドルウェアへの参照を格納し、

let outputMiddleware = (req, res) => { 
    req.user.user.full().then((fulluser) => { 
    res.json({ 
     user: fulluser, 
     params: req.query 
    }); 
    }); 
}; 

次へ:

let authenticateMiddleware = passport.authenticate('facebook-token', { session: false }); 

チェーンにすべてのミドルウェア機能をラッパー関数を一緒に作成する:

let chain = (fn) => [ authenticateMiddleware, fn, outputMiddleware ]; 

最後に、次のようなルートを宣言してください:

app.get('/user/me', chain((req, res, next) => { 
    next(); 
})); 

これは、基本的には、次のようになり、ルートハンドラ作成された何:それは基本的などのエラーをフォーマットし、適切なユーザー・データを出力しています、

app.get('/user/me', [ 
    passport.authenticate(...), 
    (req, res, next) => { ...; next() }, 
    (req, res) => { ...; res.json(...) } 
]); 
関連する問題