Thực thi một backend sử dụng Express, Mongoose ODM, và Jest (phần 25)

Tạo các API routes của chúng ta với Express

Chúng ta bây giờ có thể bắt đầu tạo các API routes định nghĩa trước đây với express. Chúng ta bắt đầu bằng cách
định nghĩa các GET routes:
1. Tạo một src/routes/posts.js file mới và nhập khẩu các hàm dịch vụ ở đó:

import {

listAllPosts,
listPostsByAuthor,
listPostsByTag,
getPostById,

} from ‘../services/posts.js’

2. Bây giờ tạo và xuất khẩu một hàm mới gọi là postsRoutes, cái lấy Express app như một đối số:

export function postsRoutes(app) {

3. Trong hàm này, định nghĩa các routes. Bắt đầu với GET /api/v1/posts route:

app.get(‘/api/v1/posts’, async (req, res) => {

4. Trong route này, chúng ta cần sử dụng các tham số truy vấn (req.query trong Express) để chập chúng vào các đối
số của các hàm của chúng ta. Chúng ta muốn có thể thêm các tham số truy vấn cho sortBy, sortOrder, author, và tag:

const { sortBy, sortOrder, author, tag } = req.query
const options = { sortBy, sortOrder }

5. Trước khi chúng ta gọi các hàm dịch vụ của chúng ta, cái có thể ném ra một lỗi nếu chúng ta truyền dữ liệu không
hiệu lực vào các hàm CSDL, chúng ta nên thêm một khối try-catch để xử lí các lỗi tiềm tàng đúng đắn:

try {

6. Chúng ta bây giờ cần check xem liệu author hay tag có đã được cung cấp. Nếu cả hai đã được cung cấp, chúng ta trả
về một 400 Bad Request status code và một JSON object với một thông điệp lỗi bằng cách gọi res.json():

if (author && tag) {

return res

.status(400)
.json({ error: ‘query by either author or tag, not

both’ })

7. Mặt khác, chúng ta gọi hàm dịch vụ tương ứng và trả về một trả lời JSON trong Express bằng cách gọi res.json().
Trong trường hợp một lỗi xảy ra, chúng ta bắt nó, ghi lại nó và trả về một 500 status code:

} else if (author) {

return res.json(await listPostsByAuthor(author,

options))

} else if (tag) {

return res.json(await listPostsByTag(tag, options))

} else {

return res.json(await listAllPosts(options))

}

} catch (err) {

console.error(‘error listing posts’, err)
return res.status(500).end()

}
})

Chia sẻ