REST-API-06-More-Routers

put 和 patch 方法区别

put 需要提交完整的 对象数据,patch 只需要提供对象的部分属性即可。
实测,patch,和put方法可以相互替代使用,并没有报错。
routers/users.js

1
2
3
4
5
6
7
8
9
10
11
12
const express = require('express');
const router = require('express-promise-router')();
const userController = require('../controllers/users');
router.route('/')
.get(userController.index)
.post(userController.newUser);
router.route('/:userId')
.get(userController.getUser)
.put(userController.replaceUser)
.patch(userController.updateUser)
;
module.exports = router;

controllers/user.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const User = require('../models/user')
module.exports = {
index: async (req, res, next) => {
const users = await User.find();
//throw new Error('Dummy error !');
res.status(200).json(users);
},
newUser: async (req, res, next) => {
const newUser = new User(req.body);
const user = await newUser.save();
res.status(200).json(user);
},
getUser: async (req, res, next) => {
// enforce that req.body must contain all the fields
console.log('req.params', req.params);
const { userId } = req.params;
const users = await User.findById(userId);
res.status(200).json(users);
},
replaceUser: async (req,res,next) =>{
// req.body may contain any number of fields
const { userId } = req.params;
const newUser = req.body;
const result = await User.findByIdAndUpdate(userId,newUser);
res.status(200).json({success:true});
},
updateUser: async (req,res,next) =>{
const { userId } = req.params;
const newUser = req.body;
const result = await User.findByIdAndUpdate(userId,newUser);
res.status(200).json({success:true});
}
}

本课代码

https://github.com/monk8/expressjs-rest-api-server/tree/lesson06

参考文档
https://www.bilibili.com/video/av11683622/#page=6