2014-10-10 00:00

[API-d22] - 實戰開發 - 讀取 TODO task API with mongoose

Github 參考

如果有使用 MongoDB client 的話就可以搭配使用會比較有感覺

Mac 我是使用 Robomongo,算很好上手~

今天要來實作讀取的部分

讀取有分兩種,一種是讀取 list

另一種是讀取特定某個 todo task,今天兩種都會實作

首先我們先實作 get todo list

因為若要拿到特定的 todo task,需要 todo task 的 id

而我們現在還不曉得 todo task 的 id 是多少,我們只知道 user_id

因此就先從 list 下手

routes/users.js:

// Get todo list
router.get('/:user_id/todos', function(req, res) {
	var user_id = req.params.user_id;

    TODO.find(
        {user_id: user_id},
        function (err, results) {
            if (err) {
                res.status(400).json(
                    { error: "can not find data" }
                );
            } else {
                res.status(200).json(
                    results
                );
            }
        }
    );
});

上面程式碼的意思是,先抓到 uri 的 user_id

再來就直接進 db 找,find() 的第一個參數為:

{user_id: user_id},

可以想像成是 SQL 語法中的 WHERE 條件

SELECT * WHERE user_id = 'user_id' FROM todos

而 callback 則是針對 error 或 results 作處理

試著將 server 跑起來,然後使用 POSTMAN 丟 GET request 試試看

如果沒有資料,就利用昨天實作的 POST API 新增幾個吧!

記得 url 中輸入的 user_id 要在 DB 中有該 user 的資料才找的到資料哦

images

如此一來就有 task id 了!

再來就來實作讀取特定 id 的 task API 吧!

程式碼如下

routes/user.js:

// Get a todo task
router.get('/:user_id/todos/:todo_id', function(req, res) {
    var user_id = req.params.user_id;
    var todo_id = req.params.todo_id;

    TODO.find(
        { _id: todo_id, user_id: user_id},
        function (err, results) {
            if (err) {
                res.status(400).json(
                    { error: "can not find data" }
                );
            } else {
                res.status(200).json(
                    results[0]
                );
            }
        }
    );
});

這次更簡單了,user_id 及 todo_id 都是從 url 上取值

接著一樣使用 where 條件,將值帶入找資料

最後交給 callback 處理回傳值

將 server 跑起來,試著先從todo list 複製某一筆 _id 的值

丟到 url 中試試看

image

如此一來,讀取特定 task 的 API 也完成囉!

Share

comments powered by Disqus