我正在尝试为todo应用开发一个简单的API。我对PUT请求有疑问:当我使用postman(REST应用程序的Chrome应用程序)时,请求很长,节点控制台显示[object, object]
而不是请求中的值。此外,mysql数据库不会更新。
路线:
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问题:
.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>
问题出在哪里?
答案 0 :(得分:1)
问题是HTML表单仅支持GET
和POST
。
至少有几个解决方案:
由于您使用的是Express,因此有一个method-override
中间件允许您POST
表单,然后在表单内部有一个隐藏的输入字段或查询参数或者自定义逻辑,用于指定用于路由目的的真实 HTTP谓词。
使用XMLHTTPRequest代替发送表单,该表单支持GET
,POST
,PUT
,和 DELETE
。