2016-02-11 11 views
13

Node/ExpressでSequelize ORMを使用しています。sequelize ORMクエリ文のエラーを処理する場所は?

私は2つのテーブルUserとItemを持っています。アイテムにUserIdにリンクされた外部キーがあります。

無効なUserId(Userテーブルには存在しません)を持つアイテムを作成しようとすると、「SequelizeForeignKeyConstraintError」がスローされ、未処理のためにアプリケーションがクラッシュします。

問題は次のとおりです。

エラーはどこで処理できますか?

ここに私のコードです。

.post(function(req,res){ 
     models.Item.create({ 
      title : req.body.title, 
      UserId : req.body.UserId 
     }).then(function(item){ 
      res.json({ 
       "Message" : "Created item.", 
       "Item" : item 
      }); 
     }); 
    }); 

答えて

16

あなたが特定のエラーを処理する場合は(つまり、あなたを素敵なエラーメッセージを表示し、代わりのサーバーを殺すより一般的にエラーを処理したい場合は、.catchハンドラ

models.Item.create({ 
    title : req.body.title, 
    UserId : req.body.UserId 
}).then(function(item){ 
    res.json({ 
    "Message" : "Created item.", 
    "Item" : item 
    }); 
}).catch(function (err) { 
    // handle error; 
}); 

を添付あなたは急行を使用している場合、それはまた、いくつかERRが含まれていunhandledexception

https://nodejs.org/api/process.html#process_event_uncaughtexception

を見を持っている場合がありますまたは施設http://expressjs.com/en/guide/error-handling.html

+10

あなたが特定のSequelizeForeignKeyConstraintErrorエラーをキャッチしたい場合は、{ は//外部キーエラーをonky扱うキャッチ機能 '.catch(Sequelize.SequelizeForeignKeyConstraintError、機能(ERR)に渡すことができますを扱います。 }); ' –

+0

HTTP 500ステータスとすべてのORMエラーをexpressで処理することは可能ですか?実際に私はデータベースにアクセスするたびに '.catch(err => {next(err)});'を追加したくありません。 –

関連する問題