使用 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
即可。
我是 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
即可。