Mã trạng thái
Thuộc phần Kiến thức cơ bản về Express trong hành trình Node.js của Coddy. Bài học 7 trên 23.
Chương trình đọc mã trạng thái trước phần thân, vì vậy lỗi được gửi kèm mã 200 trông giống như thành công.
app.get('/api/loans', (req, res) => {
if (!req.query.member) {
res.status(400).json({ error: 'Say which member' });
return;
}
res.json(loansOf(req.query.member));
});res.status(code) đặt trạng thái và trả về res, vì vậy bạn có thể viết tiếp .json(...) trên cùng một dòng. return dừng hàm sau khi xảy ra lỗi. Những mã bạn sẽ gặp nhiều nhất:
- 200: thao tác thành công (mặc định).
- 201: một thứ đã được tạo.
- 400: yêu cầu không hợp lệ, chẳng hạn như thiếu trường.
- 404: không có gì ở đường dẫn hoặc id đó.
- 500: máy chủ gặp lỗi.
Thử thách
DễMột chương trình đọc API sẽ kiểm tra mã trạng thái trước, rồi mới đọc phần thân. Hãy làm rõ trường hợp không tìm thấy trong cả hai phần.
- Trong
server.js, ở tuyến/api/recipes/:id, hãy thay đổi cách xử lý khi không có công thức nào có id đó. Giữ nguyên trạng thái 404, nhưng gửi JSON này thay cho văn bản:{"error": "No such recipe"} - Id không phải số, chẳng hạn như
abc, cũng không khớp với công thức nào. Trường hợp này cũng trả về cùng trạng thái 404 và cùng JSON.
Thử nhé: Nhấn Chạy và gửi /api/recipes/99. Bạn sẽ thấy trạng thái 404 và {"error":"No such recipe"}. Gửi /api/recipes/abc: cùng trạng thái 404 và JSON. Gửi /api/recipes/3: trạng thái 200 và công thức Lentil Curry.
Tự làm thử
import express from 'express';
import { recipes } from './data.js';
const app = express();
app.get('/', (req, res) => {
res.send('Welcome to Recipe Box');
});
// type('text') gửi văn bản thuần túy, nên mỗi tiêu đề hiển thị trên một dòng riêng.
app.get('/recipes', (req, res) => {
const { tag } = req.query;
const list = tag ? recipes.filter((recipe) => recipe.tags.includes(tag)) : recipes;
res.type('text').send(list.map((recipe) => recipe.title).join('\n'));
});
app.get('/recipes/:id', (req, res) => {
const recipe = recipes.find((r) => r.id === Number(req.params.id));
if (!recipe) {
res.status(404).send('No such recipe');
return;
}
res.send(recipe.title);
});
app.get('/api/recipes', (req, res) => {
res.json(recipes);
});
app.get('/api/recipes/:id', (req, res) => {
const recipe = recipes.find((r) => r.id === Number(req.params.id));
if (!recipe) {
res.status(404).send('No such recipe');
return;
}
res.json(recipe);
});
app.get('/about', (req, res) => {
res.send('Recipe Box collects family recipes.');
});
app.listen(3000, () => {
console.log('Recipe Box is running on port 3000');
});
Tất cả bài học trong Kiến thức cơ bản về Express
1Máy chủ đầu tiên của bạn
Xin chào, ExpressModule httpThêm tuyến đườngTham số tuyến đường2Phản hồi
Phản hồi JSONTự luyện tập: Playground Express