web-dev-qa-db-ja.com

続編ORMクエリステートメントのエラーはどこで処理しますか?

Node/ExpressでSequelize ORMを使用しています。

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

無効な(Usersテーブルに存在しない)UserIdでアイテムを作成しようとすると、「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
            });
        });
    });
24
Josh Hale

特定のエラーを処理する場合は、.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;
});

エラーをより一般的に処理する場合(つまり、サーバーを強制終了する代わりにNiceエラーメッセージを表示する場合は、unhandledexceptionを確認することをお勧めします。

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

エクスプレスを使用している場合は、いくつかのエラー処理機能も含まれています http://expressjs.com/en/guide/error-handling.html

29