[API-d22] - 實戰開發 - 讀取 TODO task API with mongoose
如果有使用 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 的資料才找的到資料哦
如此一來就有 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 中試試看
如此一來,讀取特定 task 的 API 也完成囉!