前幾個步驟己經設定好路由並和資料庫啟動並進行連線,今天建立一個Controller文件,使用request method(GET查詢 / POST新增 / PUT(Update)更新/ DELETE刪除)建立函數,對資料庫進行CRUD 操作。(Create(新增)、Read(讀取)、Update(更新)與Delete(刪除))。
respone狀態碼參照:
200 = Success(請求成功)
404 = User error(找不到資源)
userController.js
const User = require('../models/userModel')
const mongoose = require('mongoose')
//查詢全部資料
const getUsers = async (req,res) =>{
const users = await User.find({}).sort({createdAt:-1})
res.status(200).json(users)
}
//查詢一筆資料
const getUser = async (req,res)=>{
const { id } = req.params
if(!mongoose.Types.ObjectId.isValid(id)){
return res.status(404).json({error:'No such user'})
}
const user = await User.findById(id)
if(!user){
return res.status(404).json({error:'No such user'})
}
res.status(200).json(user)
}
//建立新資料
const createUser = async(req,res)=>{
const {title,load,reps} = req.body
try{
const user = await User.create({title, load, reps})
res.status(200).json(user)
}catch(error){
res.status(400).json({error:error.message})
}
}
//刪除資料
const deleteUser = async (req,res)=>{
const { id } = req.params
if(!mongoose.Types.ObjectId.isValid(id)){
return res.status(404).json({error:'No such user'})
}
Const user= await User.findOneAndDelete({_id:id})
if (!user){
return res.status(400).json({error:'No such user'})
}
res.status(200).json(user)
}
//更新資料
const updateUser = async (req,res) => {
const { id } = req.params
if(!mongoose.Types.ObjectId.isValid(id)){
return res.status(404).json({error:'No such user'})
}
const user = await User.findOneAndUpdate({_id:id},{...req.body})
if(!user){
return res.status(400).json({error:'Nor such user'})
}
res.status(200).json(user)
}
module.exports = {
getUsers,
getUser,
createUser,
deleteUser,
updateUser
}
我們己將request method都集中編碼在userController.js裡,所以路由只需導入並指定各方法函數給各個router即可。
Routes/users.js
const express = require('express');
const {
getUsers,
getUser,
createUser,
deleteUser,
updateUser
}=require('../controllers/userController');
const router = express.Router();
router.get('/', getUsers)
router.get('/:id',getUser)
router.post('/',createUser)
router.delete('/:id', deleteUser)
router.patch('/:id', updateUser )
module.exports = router