2016-08-28 1 views
0

Ich bin ein REST-api zu schaffen, und ich habe diese Fehler-Handler definiert:nicht ausführen folgenden Code, wenn Fehler-Callback

function handleError(res, reason, message, code) { 
    console.log("ERROR: " + reason); 
    res.status(code || 500).json({"error": message}); 
} 

Aber ich denke, es ist eine Art von Unterbrechung muss so dass der folgende Code nicht ausgeführt wird , denn wenn ich meine Post-Methode wie folgt implementiere:

app.post("/contacts", function(req, res) { 
    var newContact = req.body; 
    newContact.createDate = new Date(); 

    if (!(req.body.firstName || req.body.lastName)) { 
    handleError(res, "Invalid user input", "Must provide a first or last name.", 400); 
    } 
    db.collection(CONTACTS_COLLECTION).insertOne(newContact, function(err, doc) { 
     if (err) { 
     handleError(res, err.message, "Failed to create new contact."); 
     } else { 
     res.status(201).json(doc.ops[0]); 
     } 
    }); 
}); 

Der Server stürzt ab und die ungültige Einfügung wird in die Datenbank aufgenommen. Ich könnte dieses Problem mit einem else für den Einfügeteil lösen, aber ich wollte wissen, ob es eine Möglichkeit gibt, den Rest der Methode nicht zu machen, wenn die Funktion handleError aufgerufen wird.

Antwort

1

Gerade return nach Aufruf handleError Funktion

// 
    if (!(req.body.firstName || req.body.lastName)) { 
    handleError(res, "Invalid user input", "Must provide a first or last name.", 400); 
    return; 
    } 
    // 
1

Eine return Anweisung stoppt den Rest der ausgeführten Funktion.

1

einfach Ihre handelte Funktion bearbeiten, so dass die letzte Zeile wird:

return res.status(code || 500).json({"error": message}); 

Oder in Ihrem/Kontakt Handler:

if (!(req.body.firstName || req.body.lastName)) { 
    return handleError(res, "Invalid user input", "Must provide a first or last name.", 400); 
} 
1

Offensichtliche Antwort ist return oder wenn somewh Wenn Sie in der Aufrufliste weiter oben sind, haben Sie eine Fehlerbehandlung, throw Auch eine gültige Ablaufsteuerung ist möglich, aber abhängig von Ihrem Anwendungsfall könnte es eine sauberere Methode geben.

Ich schätze, Sie verwenden Express. Überprüfen Sie this aus.

Verwandte Themen