Vorwort:Warum sind meine JS-Versprechen Fehlerobjekte leer?
- Mungo Verwendung
- Drossel Verwendung und mpromise Innenseite Mungo ersetzt
- Die
req.helpers.consoleMessage
Funktion unten gesehen in ihm eine Funktion mit einigen einfachen Logik ist, dass, wenn sie nicht angezeigt werden bestimmt, eine bestimmte Detaillierungsstufe, die auf dem Vorhandensein von Debugging basiert, das in der App-Konfiguration aktiviert wurde, UND dem Nicht-Null-/Undefiniert-Status der Objekte, die angezeigt werden. Die gesamten Nachrichten werden mitJSON
beschriftet und zurückgegeben, um auf der Konsole angezeigt zu werden.
Code:
Hier ist ein Beispiel von Code diese Symptome zeigt.
Dies ist eine delete
Route für die :team
:comment
Einheiten in einer API, ich arbeite an. Ich habe absichtlich die Linie var response = user.comments;
mit einem Fehler in Bezug auf ein user
Objekt verlassen, wenn es eigentlich team
sein sollte, die von der aufrufenden Funktion zurückgegeben und in das Versprechen übergeben werden sollte. Dies sollte einen Referenzfehler verursachen, da der Benutzer nicht definiert ist.
var console = clim("(DELETE /api/v1/team/:team/comments/:comment):", logger);
// create a filters request for mongoose
var query = {};
// determine if the :team param is a username or an object id
req.helpers.validateObjectId(req.db, req.params.team) ? query._id = req.params.team : query.name = req.params.team;
if(req.helpers.validateObjectId(req.db, req.params.comment)) {
// looks good; create an update object
var update = { $pull: { comments: { _id: req.params.comment } } };
// find the comment using the query above and pull the comment id
req.models.Team.findOneAndUpdate(
query,
update,
{safe: true, new : true}
).then(function(team){
if(!team){
// create the response object
var response = {
success: false,
message: "Team not found"
};
// log request
console.info(req.helpers.consoleMessage(req, response, null));
// respond with an appropriate array
res.status(404).json(response);
}else{
// create the response object using the teams's comments
var response = user.comments;
// log request
console.info(req.helpers.consoleMessage(req, response, null));
// respond with the team comments array
res.status(200).json(response);
}
}).then(null, function(err){
// create the response
var response = { success: false, message: req.config.debug ? err: "An error has occur with your request; please try again" };
// log the errors
console.error(req.helpers.consoleMessage(req, response, err));
// or send a 500 internal server error
res.status(500).json(response);
});
}else{
// create the response
var response = { success: false, message: "Comment id is not a valid object id" };
// log the errors
console.info(req.helpers.consoleMessage(req, response, null));
// or send a 500 internal server error
res.status(500).json(response);
}
Symptom:
diese Route aufrufen wird einen Fehler erzeugen und zu bewirken, dass der .catch()
in einem Versuch, Feuer aus dem fehlerbehafteten Zustand wiederherzustellen jedoch das err
Objekt scheint leer zu sein.
Ex. HTTP-Antwort: { success: false, message: {} }
Ex. Konsole log (abgekürzt aus Gründen der Klarheit) { req: {...}, res: {...}. err: {} }
Fazit:
err
Das Objekt erscheint leer zu sein ...
Cool! Danke für Anteil. – danilodeveloper
Hah, ich habe genau den gleichen Fehler gemacht. Dies ist die nützlichste Sache bei Stack Overflow heute für mich. Vielen Dank. – jlegler