Javascript res.advancedResults在节点中,如何创建它们?

Javascript res.advancedResults在节点中,如何创建它们?,javascript,node.js,express,pagination,backend,Javascript,Node.js,Express,Pagination,Backend,你好,我是一名学生,目前正在和一些人一起做一个项目 我被赋予了一项任务,那就是创造先进的成果。我知道这是一个中间件,我知道中间件,但这对我来说是新的 我在谷歌上搜索了很多,并试图在书中找到一些信息,但找不到 我有这个代码,这是一个advancedResults示例,但我不能理解它 const advancedResults = (model, populate) => async (req, res, next) => { let query; // Copy req.qu

你好,我是一名学生,目前正在和一些人一起做一个项目 我被赋予了一项任务,那就是创造先进的成果。我知道这是一个中间件,我知道中间件,但这对我来说是新的

我在谷歌上搜索了很多,并试图在书中找到一些信息,但找不到

我有这个代码,这是一个advancedResults示例,但我不能理解它

const advancedResults = (model, populate) => async (req, res, next) => {
  let query;

  // Copy req.query
  const reqQuery = { ...req.query };

  // Fields to exclude
  const removeFields = ["select", "sort", "page", "limit"];

  // Loop over removeFields and delete them from reqQuery
  removeFields.forEach((param) => delete reqQuery[param]);

  // Create query string
  let queryStr = JSON.stringify(reqQuery);

  // Create operators ($gt, $gte, etc)
  queryStr = queryStr.replace(
    /\b(gt|gte|lt|lte|in)\b/g,
    (match) => `$${match}`
  );

  // Finding resource
  query = model.find(JSON.parse(queryStr));

  // Select Fields
  if (req.query.select) {
    const fields = req.query.select.split(",").join(" ");
    query = query.select(fields);
  }

  // Sort
  if (req.query.sort) {
    const sortBy = req.query.sort.split(",").join(" ");
    query = query.sort(sortBy);
  } else {
    //   TODO if no sort query exist, make a default one
    //   query = query.sort('-createdAt');
  }

  // Pagination
  const page = parseInt(req.query.page, 10) || 1;
  const limit = parseInt(req.query.limit, 10) || 25;
  const startIndex = (page - 1) * limit;
  const endIndex = page * limit;
  const total = await model.countDocuments(JSON.parse(queryStr));

  query = query.skip(startIndex).limit(limit);

  if (populate) {
    query = query.populate(populate);
  }

  // Executing query
  const results = await query;

  // Pagination result
  const pagination = {};

  if (endIndex < total) {
    pagination.next = {
      page: page + 1,
      limit,
    };
  }

  if (startIndex > 0) {
    pagination.prev = {
      page: page - 1,
      limit,
    };
  }

  res.advancedResults = {
    success: true,
    count: results.length,
    pagination,
    data: results,
  };

  next();
};

module.exports = advancedResults;

const advancedResults=(模型,填充)=>async(请求,恢复,下一步)=>{
让查询;
//复制请求查询
const reqQuery={…req.query};
//要排除的字段
const removeFields=[“选择”、“排序”、“页面”、“限制”];
//在removeFields上循环并从reqQuery中删除它们
removeFields.forEach((param)=>deleteReqQuery[param]);
//创建查询字符串
让queryStr=JSON.stringify(reqQuery);
//创建运营商($gt、$gte等)
queryStr=queryStr.replace(
/\b(gt | gte | lt | lte | in)b/g,
(匹配)=>`$${match}`
);
//寻找资源
query=model.find(JSON.parse(queryStr));
//选择字段
if(请求查询选择){
const fields=req.query.select.split(“,”).join(“”);
query=query.select(字段);
}
//分类
if(请求查询排序){
const sortBy=req.query.sort.split(“,”).join(“”);
query=query.sort(sortBy);
}否则{
//TODO如果不存在排序查询,则创建默认查询
//query=query.sort('-createdAt');
}
//分页
const page=parseInt(req.query.page,10)| 1;
const limit=parseInt(req.query.limit,10)| 25;
常量startIndex=(第1页)*限制;
const endIndex=页面*限制;
const total=await model.countDocuments(JSON.parse(queryStr));
query=query.skip(startIndex).limit(limit);
如果(填充){
query=query.populate(填充);
}
//执行查询
const results=等待查询;
//分页结果
常数分页={};
如果(endIndex<总计){
分页。下一步={
页码:第+1页,
极限,
};
}
如果(起始索引>0){
pagination.prev={
第页:第1页,
极限,
};
}
res.advancedResults={
成功:没错,
计数:results.length,
标页码
数据:结果,
};
next();
};
module.exports=高级结果;
所以我的问题是,它做什么,为什么我应该使用它?如何在node.js中创建一个? 我将感谢你的帮助