Github 參考

接上篇,我們已經可以拿到 todo list 了

也可以拿到特定的 todo task

再來我們就可以編輯特定的 todo task 了對吧?

不囉唆直接進入程式碼

routes/users.js

// Update a todo task
router.put('/:user_id/todos/:todo_id', function(req, res) {
    var user_id = req.params.user_id;
    var todo_id = req.params.todo_id;
    var data = req.body;

    TODO.update(
        { _id: todo_id, user_id: user_id },
        { $set: { content: data.content } },
        function (err, num, raw, results) {
            if (err) {
                res.status(400).json(
                    { error: "update data error" }
                );
            } else {
                TODO.find({ _id: todo_id, user_id: user_id }, function (err, results) {
                    res.status(201).json(
                        results[0]
                    );
                });
            }
        }
    );
});

這次拿資料要拿三組: user_id, todo_id, 以及 data from req.body

var user_id = req.params.user_id;
var todo_id = req.params.todo_id;
var data = req.body;

body 的資料很簡單,就是欲修改的 content 的資料:

{ "content": "想修改的資料" }

再來,除了是使用 .update 方法以及同樣要下 WHERE 參數外, .update 方法還多了一個參數:

{ _id: todo_id, user_id: user_id },
{ $set: { content: data.content } },

$set 的意思等同於 SQL 語法中的 SET

如果沒有加 $set 變成下面這樣:

{ _id: todo_id, user_id: user_id },
{ content: data.content } ,

整個資料就會被洗掉,變成只有 { content: data.content }

因此有沒有加 $set 差很多哦

後面一樣是 callback 的處理

都寫好後,實際開 POSTMAN 試試看吧!

記得要使用 PUT 來丟 request

例子如下,我把原本的 buy milk 改成 buy milk and banana

image

這樣離完成 API 就不遠啦!

明天就稍微休息一下吧 XD