2016-06-29 12 views
0

私はExpressアプリケーション用のレンダリングコードをいくつか書いていますが、エラーを捕捉して関数レンダリングで出力したいのですが、どのようにそれらをあるメソッドから別のメソッドに移動するのかはわかりません。プロミスチェーンの参照された関数から値を渡すか?

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

var render = (req, res, errs) => { 
    var response = { 
     params: req.query, 
     user: req.user.fulluser 
    }; 
    res.json(response); 
}; 
+0

'res.status(500).send()'。あなたのエラーはあなたが送る必要があるメッセージです(すべてのエラーメッセージがjson形式である可能性があります) –

答えて

0

あなたは誤差関数を使用することができます。

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

var render = (req, res) => { 
    var response = { 
     params: req.query, 
     user: req.user.fulluser 
    }; 
    res.json(response); 
}, 
error = (reason) => { 
    reason.errors.forEach((error) =>{ 
     console.log(error); 
    }); 
    return; 
}; 
0

最もエレガントな速いが、そうでないかもしれない解決策は、あなたがこのような何かを行うことができ、あなたのレンダリング関数にパラメータとしてエラーを追加することですチェーンの最後のミドルウェアとして、単に次のチェーンへの要求を渡す:

var render = (req, res) => { 
    var response = { 
     params: req.query, 
     user: req.user.fulluser 
    }; 
    res.json(response); 
} 

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

app.use((reason, req, res, next) => { 
    res.send(reason.errors); 
    // or you can send them as json: res.status(404).json({errors: reason.errors}) 
}); 

は、変数の宣言がトップに掲揚されている、あなたのコードで問題を巻き上げの用心、ありませんそれらの割り当て、エラー、レンダリング機能は、あなたのルートからアクセスされたときには未定義として表示されることがあります。

関連する問題