Search code examples
javascriptnode.jsmongoosestrapi

Create custom query in Strapi with Mongoose


I'm new to both Strapi and Mongoose, so I apologise if this is a stupid question.

Following the docs (https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html) I'm trying to create a custom query in Strapi in which I want to return the whole collection called people sorted by name desc. But when I hit the endpoint I get a 500 error and checking the terminal the error message is CastError: Cast to ObjectId failed for value "alldesc" at path "_id" for model "people".

Here's my code:

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": []
      }
    }
  ]
}

What am I doing wrong?

UPDATE: even when removing .sort({ name: "descending" }); from the query, the error is still there, so I'm thinking that maybe there's something wrong in the way I use the service in the controller?


Solution

  • The problem was in routes.json. Basically seems like Strapi doesn't like the slash / so instead of /people/alldesc I tried /people-alldesc and it worked.

    Also in the service there's no need for return result.map((entry) => entry.toObject());, that causes anther error, simply doing return result works.