Ich habe ein Mungo-Schema für eine mongodb Sammlung zu aktualisieren, die ich wie folgt definieren:Wie MongoDB Dokument mit Mungo
var userSchema = new mongoose.Schema({
username: {type: String, unique : true},
password: {type: String},
firstname: String,
lastname: String,
sketches: [{name: String, sketch: Array}]
});
var User = mongoose.model('User', userSchema);
In der Datenbank Sammlung, ich habe zur Zeit ein Dokument, das Werte für alle Attribute außer sketches
enthält zu Testzwecken. Ich habe einen Server-Endpunkt, dass, wenn das Dokument mit dem Namen sollte eine PUT-Anfrage machen zu aktualisieren und ein Objekt in die Skizzen Array hinzufügen:
app.route("/addSketch/:username").put(function(req, res) {
var user_name = req.params.username;
User.findOne({username:user_name},function(err,foundObject){
if(err){
console.log("error");
res.status(500).send();
}
else{
if(!foundObject){
res.status(404).send();
}
else{
if(req.body.strokes && req.body.sketchName){
var sketchObj = [];
sketchObj[req.body.sketchName] = req.body.strokes;
foundObject.sketches.push(req.body.sketchData);
}
foundObject.save(function(err,updatedObject){
if(err){
console.log(err);
res.status(500).send();
}
else{
res.send(updatedObject);
}
});
}
}
});
console.log('saving on server');
var form = formidable.IncomingForm();
console.log(form);
console.log('the type of the request received is', (typeof req));
form.parse(req, function(err, fields, files) {
res.writeHead(200, {"content-type": "text/plain"});
res.write('received upload:\n\n');
var name = fields.name;
var newSketch = new SavedSketch();
newSketch.name = name;
newSketch.sketchData = fields.value;
newSketch.save(function(err,savedObject){
if(err){
console.log(err);
res.status(500).json({status:'failure'})
}
else{
console.log("ID: " + fields.value.id + " strokeData:" + fields.value.strokes);
res.json({status: 'success'});
}
});
res.end();
});
});
In diesem Web-Service, ich bin im Wesentlichen versucht, das User-Dokuments durch die Auswahl Benutzernamen, die als Parameter an die uRL-Zeichenfolge wie folgt übergeben wird:
http://localhost:11235/addSketch:testname
Aus irgendeinem Grund, wenn ich versuche, eine PUT-Anfrage mit Postbote mit folgendem Körper zu machen, bekomme ich einen 404-Fehler:
{"sketchName" : "tempName", "strokes":[1,2,3,4,5]}
Das Dokument selbst enthält die folgenden Daten:
{
"lastname" : "name",
"firstname" : "test",
"password" : "password123",
"username" : "testname",
"_id" : ObjectId("57c4d7693aa85cea2acf4d4d"),
"sketches" : [],
"__v" : 0
}
Gibt es einen Fehler in der Logik des Webdienstes selbst, die das Dokument vor einem gefunden wird verhindert?
Ich habe den Link geändert, aber jetzt bekomme ich einen 500 Fehler ... – loremIpsum1771
500 Fehler ist interner Serverfehler, jetzt müssen Sie überprüfen, wo in Ihrer Route, es bricht. Verwenden Sie console.log() an verschiedenen Stellen in Ihrem Backend-Code und finden Sie heraus, an welcher Stelle es bricht. Dann können Sie eine andere Frage stellen, wenn Sie diesen Fehler nicht lösen können. Soweit diese Frage gestellt wird, ist sie gelöst. –