Cập nhật một phần bằng PATCH
Thuộc phần REST API trong hành trình Node.js của Coddy. Bài học 3 trên 25.
Đánh dấu một nhiệm vụ là hoàn tất không có nghĩa là phải gửi lại tiêu đề của nhiệm vụ đó. PATCH chỉ mang theo các trường thay đổi, còn máy chủ giữ nguyên mọi trường khác.
// PATCH /api/invoices/7 { "paid": true }
const { paid, amount } = req.body ?? {};
if (paid !== undefined) invoice.paid = paid;
if (amount !== undefined) invoice.amount = amount;
res.json(invoice);Kiểm tra từng trường với undefined, không dùng if (paid): false là một giá trị mà client có thể gửi. Sao chép từng trường riêng lẻ thay vì trải rộng req.body lên đối tượng, để client không thể thay đổi id. Nếu yêu cầu không có phần thân, req.body sẽ là undefined, và ?? {} xử lý trường hợp đó. Phản hồi là 200 kèm toàn bộ hóa đơn đã cập nhật.
Thử thách
DễPATCH /api/tasks/:idchỉ thay đổi các trường mà phần thân gửi,titlehoặcdone.- Phản hồi bằng mã 200 cùng toàn bộ tác vụ.
- ID không xác định sẽ nhận phản hồi 404 với
{ "error": "Task not found" }.
Gửi PATCH /api/tasks/2 với { "done": true }, sau đó gửi GET /api/tasks/2, rồi gửi cùng yêu cầu PATCH đến /api/tasks/99.
Tự làm thử
import { Router } from 'express';
import { nextId, tasks } from '../store.js';
const router = Router();
router.get('/', (req, res) => {
res.json(tasks);
});
router.get('/:id', (req, res) => {
const task = tasks.find((t) => t.id === Number(req.params.id));
if (!task) {
return res.status(404).json({ error: 'Task not found' });
}
res.json(task);
});
router.post('/', (req, res) => {
const { title } = req.body ?? {};
if (!title) {
return res.status(400).json({ error: 'title is required' });
}
const task = { id: nextId(), title, done: false, createdAt: new Date().toISOString() };
tasks.push(task);
res.status(201).location(`/api/tasks/${task.id}`).json(task);
});
export default router;
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong REST API
1Tài nguyên và động từ
Tài nguyên và URLTạo tài nguyên bằng POST4Trình duyệt, phiên bản và cấu hình
Origin là gìCho phép một origin khácCORSTrang gọi APITự luyện tập: Playground Express