同一控制器中的 MERN 分页和过滤

MERN pagination and filtering in same controller

如何在同一个controller后台做分页和过滤?

过滤服务:-

const filterPosts = async (filterData, token) => {
    const config = {
      headers: {
        Authorization: `Bearer ${token}`,
      },
      data: {
        filterData,
      },
    };
  
    const response = await axios.get(API_URL, config);
  
    return response.data;
  }

路线:-

router.route("/").get(protect, getPosts);

控制器:-

我似乎无法将 filterData 从服务发送到此控制器,如何实现?

const getPosts = asyncHandler(async (req, res) => {

     console.log("filter data:- ", req.body); // This Part is undefined.

  
    //pagination
    const PAGE_SIZE = 6;
    const PAGE = parseInt(req.query.page || "0");
    const total = await Post.countDocuments({ user: req.user.id });
  
      
    const AllPosts = await Post.find({ user: req.user.id })
      .limit(PAGE_SIZE)
      .skip(PAGE_SIZE * PAGE)
      .sort({ createdAt: -1 });
  
    const totalPages = Math.ceil(total / PAGE_SIZE);
  
    res.status(200).json({ totalPages, Allposts });
  });

console.log("filter data:- ", req.body); // 这部分未定义。

您可以在 Get 请求中使用 config.params 发送此数据,如果您想使用 config.data.

,则可以使用 Post 请求

有时 XHR / Fetch 不允许 Get 请求中的负载。 根据此 axios doc,将数据作为请求正文发送仅适用于请求方法 PUTPOSTDELETEPATCH.

你也可以参考这个问题:Link

const filterPosts = async (filterData, token) => {
  const config = {
    headers: {
      Authorization: `Bearer ${token}`,
    },
    params: {
      filterData,
    },
  };

  const response = await axios.get(API_URL, config);

  return response.data;
}