2016-02-11 5 views
13

Ich benutze Sequelize ORM in Node/Express.Wohin mit dem Fehler in einer Sequelize-ORM-Abfrageanweisung?

Ich habe zwei Tabellen, Benutzer und Artikel. Artikel hat einen Fremdschlüssel, der mit UserId verknüpft ist.

Wenn ich versuche, ein Element mit einer UserId zu erstellen, die ungültig ist (nicht in der Users-Tabelle vorhanden), wird ein "SequelizeForeignKeyConstraintError" ausgelöst und führt zum Absturz der Anwendung aufgrund von unhandled.

Das Problem, das ich habe, ist dies:

Wo gehe ich den Fehler?

Hier ist mein Code.

.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 
      }); 
     }); 
    }); 

Antwort

16

Wenn Sie den spezifischen Fehler zu handhaben möchten, fügen Sie eine .catch Handler

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; 
}); 

Wenn Sie Fehler allgemeiner behandeln möchten (dh eine nette Fehlermeldung an, statt den Server zu töten, Sie vielleicht möchten Sie einen Blick haben, bei UnhandledException

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

Wenn Sie Express verwenden, enthält es auch einige err oder Umschlagsanlagen http://expressjs.com/en/guide/error-handling.html

+10

Wenn Sie die spezifischen SequelizeForeignKeyConstraintError Fehler fangen wollen, können Sie es an die Fang-Funktion übergeben '.catch (Sequelize.SequelizeForeignKeyConstraintError, Funktion (err) {// Onky Fremdschlüssel Fehler behandeln; }); ' –

+0

ist es möglich, alle ORM-Fehler durch HTTP 500-Status und Standard-Fehlerhandler in Express zu behandeln? Eigentlich möchte ich '.catch (err => {next (err)});' nicht hinzufügen, wenn ich die Datenbank anklicke. –