簡體   English   中英

在 Mongoose 中添加分頁和排序作為中間件(node.js,express RestAPI)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM