Просматривая этот учебник MERN , с этим маршрутом «обновления».
todoRoutes.route('/update/:id').post(function(req, res) {
Todo.findById(req.params.id, function(err, todo) {
if (!todo)
res.status(404).send("data is not found");
else
todo.todo_description = req.body.todo_description;
todo.todo_responsible = req.body.todo_responsible;
todo.todo_priority = req.body.todo_priority;
todo.todo_completed = req.body.todo_completed; todo.save().then(todo => {
res.json('Todo updated!');
})
.catch(err => {
res.status(400).send("Update not possible");
});
});
});
Это схема, используемая БД:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;let Todo = new Schema({
todo_description: {
type: String
},
todo_responsible: {
type: String
},
todo_priority: {
type: String
},
todo_completed: {
type: Boolean
}
});module.exports = mongoose.model('Todo', Todo);
I хотите выполнить обновление в al oop, поэтому изменение схемы не заставит меня изменить что-то и в маршруте.
Как я могу сделать что-то вроде (используя Python псевдокод):
for param in req.body:
setattr(todo, param.name, param.value)
# where param example might be an object with these 2 fields ('name', 'value')
Вот что у меня пока:
todoRoutes.route('/update/:id').post(function(req, res) {
Todo.findById(req.params.id, function(err, todo) {
if (!todo)
res.status(404).send("Data is not found");
else
req.body.forEach(function (item) {
todo.setAttribute(req.body.getAttribute(item));
});
todo.save().then(todo => {
res.json('Item updated!');
}).catch(err => {
res.status(400).send("Update not possible: " + err);
});
});
});