У меня есть мангуста схемы для сбора 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
}
Есть ли ошибка в логике самого веб-службы, препятствующей документ не был найден?
Я изменил ссылку, но теперь я получаю ошибку 500 ... – loremIpsum1771
500 Ошибка - это внутренняя ошибка сервера, теперь вам нужно проверить, где на вашем маршруте она ломается. Используйте console.log() в разных точках вашего внутреннего кода и узнайте, в какой момент он разбивается. Тогда вы можете задать другой вопрос, если вы не можете решить эту ошибку. Что касается этого вопроса, то он разрешен. –