2014-10-25 3 views
0

Я пытаюсь разработать простой API для приложения todo. У меня проблема с запросами PUT: когда я использую postman (chrome app для REST), запрос длинный, а консоль узла отображает [object, object], а не значение из запроса. Кроме того, база данных mysql не обновляется.Экспресс 4.0 и Mysql prblem с запросом PUT и DELETE

Маршрут:

router.route('/todo/:todo_id') 
.put(function(req, res) { 
    var input = JSON.parse(JSON.stringify(req.params)); 
    var id = req.params.id; 
    var data = { 
     todo_title: input.title, 
     todo_description: input.description 
    }; 
    db.query('UPDATE task SET ? WHERE todo_id = ?', [data,id], function(err, result) { 
     if(err) throw err; 
     console.log("Dane zostały uaktualnione: " + result); 
    }); 
}); 

У меня проблема с УДАЛИТЬ тоже:

.delete(function(req, res) { 
    db.query('DELETE FROM task WHERE todo_id=?', [req.params.todo_id], function(err, result) { 
     if (err) throw err; 
     console.log('usunieto: ' +result); 
    }); 
}); 

Шаблон:

<h1>Edit</h1> 
    <% items.forEach(function(item) { %> 
    <form action="/api/todo/<%= item.todo_id %>" method="PUT">  
     <label for="title">Nazwa zadania</lablel><br> 
     <input name="title" type="text" value="<%= item.todo_title %>"><br> 
     <label for="description">Opis zadania</label><br> 
     <textarea name="description" value="<%= item.todo_description %>"></textarea><br> 
     <input type="submit" value="SSij"> 
    <% }); %> 
    </form> 

Где проблема?

ответ

1

Проблема в том, что формы HTML поддерживают только GET и POST.

Там, по крайней мере, несколько решений этой:

  • Поскольку вы используете Express, есть method-override промежуточного слоя, что позволяет POST форму вместо этого, а затем внутри формы у вас есть скрытое поле ввода или параметр запроса или настраиваемая логика, которая обозначает HTTP-глагол real для использования в целях маршрутизации.

  • Используйте XMLHTTPRequest, чтобы отправить форму вместо этого, который поддерживает GET, POST, PUT, иDELETE.