2016-08-30 7 views
0

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?

Antwort

1

404 ist Fehler nicht gefunden, dh die Route ist nicht verfügbar.

Ihre URL zu dieser Änderung:

http://localhost:11235/addSketch/testname 

Sie nicht den Fehler 404 nach diesem bekommen. ich hoffe das hilft.

Edit: Lösen von 500 Fehler Ausgabe

Sie das Objekt im falschen Format in der Skizze Array drängen.

ersetzen:

var sketchObj = []; 
sketchObj[req.body.sketchName] = req.body.strokes; 
foundObject.sketches.push(req.body.sketchData); 

mit:

foundObject.sketches.push({"name" : req.body.sketchName,"sketch" :req.body.strokes}); 

dies Ihre 500 Fehler lösen soll.

+0

Ich habe den Link geändert, aber jetzt bekomme ich einen 500 Fehler ... – loremIpsum1771

+0

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. –