iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
Modern Web

React應用記錄誌系列 第 29

Day29 MERN Stack -5 RESTful API

  • 分享至 

  • xImage
  •  

前幾個步驟己經設定好路由並和資料庫啟動並進行連線,今天建立一個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

上一篇
Day28 MERN Stack -4 - MongoDB Atlas & Mongoose
下一篇
Day30 MERN Stack -6 Frontend React實作
系列文
React應用記錄誌31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言