使用 Mongoose 在 Strapi 中创建自定义查询

Create custom query in Strapi with Mongoose

我是 Strapi 和 Mongoose 的新手,如果这是一个愚蠢的问题,我深表歉意。

按照文档 (https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html) 我正在尝试在 Strapi 中创建一个自定义查询,我想在其中 return 整个名为 people 的集合按名称 desc 排序。但是当我到达终点时,我收到 500 错误并检查终端,错误消息是 CastError: Cast to ObjectId failed for value "alldesc" at path "_id" for model "people".

这是我的代码:

services/people.js

module.exports = {
  findByNameDesc() {
    const result = strapi
      .query("people")
      .model.find()
      .sort({ name: "descending" });

    return result.map((entry) => entry.toObject());
  },
};

controllers/people.js

module.exports = {
  async alldesc(ctx) {
    const entities = await strapi.services.people.findByNameDesc(ctx);

    return entities.map((entity) =>
      sanitizeEntity(entity, { model: strapi.models.people })
    );
  },
};

config/routes.json

{
  "routes": [

     ...

    {
      "method": "GET",
      "path": "/people/alldesc",
      "handler": "people.alldesc",
      "config": {
        "policies": []
      }
    }
  ]
}

我做错了什么?

更新:即使从查询中删除 .sort({ name: "descending" });,错误仍然存​​在,所以我认为我在控制器中使用服务的方式可能有问题?

问题出在 routes.json。基本上似乎 Strapi 不喜欢斜杠 / 所以我尝试 /people-alldesc 而不是 /people/alldesc 并且它起作用了。

此外,在服务中不需要 return result.map((entry) => entry.toObject());,这会导致另一个错误,只需执行 return result 即可。