2016-06-28 9 views
1

ミドルウェアの定義にエラーがあり、約束を返すルートがあります。しかし、その約束が間違っている場合は、約束の後に手動で.catch(err => next(err))を追加する必要があります。それは問題ではありませんが、ExpressJsがルートが約束を返すかどうかを確認することは賢明ではありません。そうであればエラー処理ミドルウェアを自動的に呼び出します。ExpressJS:ミドルウェアの約束とエラーの処理

私の現在の短縮コード:たとえば

// errorHandlers.js 
function sequelizeValidationError (err, req, res, next) { 
    if (err.name && err.name == 'SequelizeValidationError') 
    res.status(400).send(err.errors) 
    else next(err) 
} 

// auth.js 
router.post ('/register', middleware.isNotAuthenticated, (req, res, next) => { 
    const { email, password, name } = req.body; 

    return models.User.find({where : { email }}).then(user => { 
    if (user) { 
     if (user.password == password) sendToken(user.id, res); 
     else res.sendStatus(401); 
    } else { 
     return models.User.create({ 
     email, password, name 
     }).then(user => { 
     sendToken(user.id, res); 
     }) 
    } 
    }).catch(next) 
}) 

// index.js 
router.use('/auth', require('./auth')) 

router.use(errorHandlers.sequelizeValidationError) 

、現在、私は1つの場所でcatchを書くのを忘れている可能性があり、サーバーは失敗しただろう。

何かが欠落していますか?毎回catchと入力する必要はありませんか?

+0

フレームワークの切り替えがオプションであるかどうかはわかりませんが、http://koajs.com/は本来の約束で動作します。キャッチミドルウェアの作成はkoa.js – Herku

+0

@Herkuでは簡単ではありませんが、私はこのプロジェクトではできませんが、次のプロジェクトのためにkoaを見ていきます。 [koa-router](https://github.com/alexmingoia/koa-router)で使いやすくなっています。 –

+1

Expressには、さまざまなモジュールが用意されています。たとえば、['promise- express-router'](https://github.com/ufo22940268/promise-express-router)と['express-ko'](https://github.com/ex-machine/express-ko)(これもまたExpressのためにKoa-goodnessを実装しています)。多分それは使用のです。 – robertklep

答えて

0

already filedです。

最善の策は、wrap functionを使用するように思わ今のところ私はduplicate bug

を提出しました。

上記の@robertklepのコメントも参照してください。 promise-express-routerは、route-paramsを使用しない場合に便利です。 express-coはラップ関数+より多くのジェネレータベースの良さのようです

関連する問題