[英]Add pagination and sorting as a middleware in Mongoose (node.js, express RestAPI)
有沒有辦法向所有請求添加限制、跳過和排序參數(如下所示),而不必為每個端點定義它們(有點像中間件)? 我希望我的請求檢查查詢 URL 中的限制、跳過和 sortBy 參數,並相應地添加適當的參數。
// Fetch all movies: GET /
router.get("/", async (req: Request, res: Response) => {
try {
const movies = await Movie.find().limit(req.query.limit).skip(req.query.skip).sort({title: 1});
res.json(movies);
} catch (err) {
res.json({ message: err });
console.log(err);
}
});
我想出了一個不錯的解決方案:我創建了一個 SearchOptions 類,它接收查詢並保存我想要的參數:
class SearchOptions {
limit: number | null;
skip: number | null;
sort: object | null;
constructor(query: any) {
this.limit = query.limit ? parseInt(query.limit) : null;
this.skip = (query.page && this.limit) ? (parseInt(query.page)-1) * this.limit : null;
this.sort = {};
if(query.sortBy) {
const sortStr = query.sortBy.split(':');
this.sort[sortStr[0]] = sortStr[1] === 'desc' ? -1 : 1
}
}
}
export default SearchOptions;
然后我只是在我的路線中創建了一個新的對象實例:
// Fetch all movies: GET /
router.get("/", async (req: Request, res: Response) => {
try {
const movies = await Movie.find({}, null, new SearchOptions(req.query));
res.json(movies);
} catch (err) {
res.json({ message: err });
console.log(err);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.