2016-08-30 8 views
0

У меня есть мангуста схемы для сбора MongoDB, который я определяю следующим образом:Как обновить MongoDB документ с мангуста

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

В коллекции базы данных, я в настоящее время есть документ, который содержит значения для всех атрибутов, кроме sketches для целей тестирования. У меня есть конечная точка сервера, который при вызове должен сделать запрос PUT, чтобы обновить документ и добавить объект в массив зарисовки:

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

В этой веб-службе, я по существу пытаюсь выбрать документ пользователя по имя пользователя, который передается в качестве параметра в URL-адрес строки, как следующее:

http://localhost:11235/addSketch:testname 

по какой-то причине, когда я пытаюсь сделать запрос PUT с помощью почтальона со следующим телом, я получаю сообщение об ошибке 404:

{"sketchName" : "tempName", "strokes":[1,2,3,4,5]} 

Сам документ содержит следующие данные:

{ 
    "lastname" : "name", 
    "firstname" : "test", 
    "password" : "password123", 
    "username" : "testname", 
    "_id" : ObjectId("57c4d7693aa85cea2acf4d4d"), 
    "sketches" : [], 
    "__v" : 0 
} 

Есть ли ошибка в логике самого веб-службы, препятствующей документ не был найден?

ответ

1

404 Ошибка не найдена, это значит, что маршрут недоступен.

Измените свой адрес на это:

http://localhost:11235/addSketch/testname 

Вы не получите сообщение об ошибке 404 после этого. надеюсь, это поможет.

Edit: Решение 500 выпуск Ошибка

вы подталкивают объект в неправильном формате в эскизе массива.

заменить:

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

С:

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

это должно решить 500 Error.

+0

Я изменил ссылку, но теперь я получаю ошибку 500 ... – loremIpsum1771

+0

500 Ошибка - это внутренняя ошибка сервера, теперь вам нужно проверить, где на вашем маршруте она ломается. Используйте console.log() в разных точках вашего внутреннего кода и узнайте, в какой момент он разбивается. Тогда вы можете задать другой вопрос, если вы не можете решить эту ошибку. Что касается этого вопроса, то он разрешен. –

Смежные вопросы