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
と入力する必要はありませんか?
フレームワークの切り替えがオプションであるかどうかはわかりませんが、http://koajs.com/は本来の約束で動作します。キャッチミドルウェアの作成はkoa.js – Herku
@Herkuでは簡単ではありませんが、私はこのプロジェクトではできませんが、次のプロジェクトのためにkoaを見ていきます。 [koa-router](https://github.com/alexmingoia/koa-router)で使いやすくなっています。 –
Expressには、さまざまなモジュールが用意されています。たとえば、['promise- express-router'](https://github.com/ufo22940268/promise-express-router)と['express-ko'](https://github.com/ex-machine/express-ko)(これもまたExpressのためにKoa-goodnessを実装しています)。多分それは使用のです。 – robertklep