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

Định nghĩa một hàm để liệt kê các posts

Sau khi định nghĩa một hàm để tạo các posts, chúng ta bây giờ sẽ định nghĩa một hàm listPosts nội bộ, cái cho
phép chúng ta truy vấn các posts và định nghĩa một trật tự xắp sếp. Sau đó, chúng ta sẽ sử dụng hàm này để định
nghĩa các hàm listAllPosts, listPostsByAuthor, và listPostsByTag:
1. Biên tập src/services/posts.js file và định nghĩa một hàm mới tại cuối file.
Hàm chấp nhận một đối số query và options (với các đặc tính sortBy và sortOrder). Với sortBy, chúng ta có thể
định nghĩa trường nào chúng ta muốn sắp sếp, và đối số sortOrder cho phép chúng ta chỉ ra các posts có được xắp
sếp theo trật tự tăng hay giảm. Theo mặc định, chúng ta liệt kê tất cả các posts (object rỗng như query) và thể
hiện các posts mới nhất trước tiên (xắp sếp theo createdAt, trong trật tự giảm dần):

async function listPosts(

query = {},
{ sortBy = ‘createdAt’, sortOrder = ‘descending’ } = {},

)  {

2. Chúng ta có thể sử dụng phương thức .find() từ Mongoose model của chúng ta để liệt kê tất cả các posts, truyền
một đối số để xắp sếp chúng:

return await Post.find(query).sort({ [sortBy]: sortOrder })

}

3. Bây giờ chúng ta có thể định nghĩa một hàm để liệt kê tất cả các posts, cái đơn giản truyền một object rỗng
như query:

export async function listAllPosts(options) {

return await listPosts({}, options)

}

4. Tương tự, chúng ta có thể tạo một hàm để liệt kê tất cả các posts theo một author nhất định bằng cách truyền
author tới query object:

export async function listPostsByAuthor(author, options) {

return await listPosts({ author }, options)

}

5. Cuối cùng, định nghĩa một hàm để liệt kê các posts theo tag:

export async function listPostsByTag(tags, options) {

return await listPosts({ tags }, options)

}

Trong MongoDB, chúng ta đơn giản có thể khớp các strings trong một mảng bằng cách khớp string như thể nó là một giá
trị đơn, nên tất cả việc chúng ta cần làm là thêm một truy vấn cho tags: ‘nodejs’. MongoDB sau đó sẽ trả về tất
cả tài liệu cái có một ‘nodejs’ string trong mảng tags của chúng.
Chú ý
Toán tử { [variable]: … } phân giải string lưu trong variable thành một tên key cho object được tạo. Nên, nếu
biến của chúng ta chứa ‘createdAt’, object kết quả sẽ là { createdAt: … }.
Sau khi định nghĩa hàm list post, cũng hãy viết các test cases cho nó.

Chia sẻ