Stack Overflow 社区您好,
在 Strapi 中,我有一个包含各种条目的表,在该表中,有一个名为 code 的字段,其中包含随机生成的数字。我的主要目标是使用此代码字段查找特定记录。我需要有关如何正确发出 RESTful API 请求以获取与特定代码关联的数据的指导。
例如,当我的 Flutter 应用程序中的用户进行预订时,他们会收到这个唯一的代码。稍后,他们应该能够通过 Strapi API 使用此代码来检索其预订详细信息。因此,当提供代码作为查询参数时,我需要端点以特定记录进行响应。
我在 Strapi v4 应用程序中遇到自定义搜索端点的持续问题。不幸的是,我没有 Node.js 背景,并且该端点旨在由 Flutter 应用程序使用。这是发生的事情:
问题描述:
当我向自定义端点 (https://example.com/api/reserves/search?code=12962) 提交 GET 请求时,我收到 404 Not Found 响应。控制台中没有显示任何错误,只有此日志条目:
[2024-02-04 16:30:10] [2024-02-04 16:30:10.232] http: GET /api/reserves/search?code=12962 (7 毫秒) 404 故障排除完成:
确保在 Strapi 配置中正确设置路由和控制器。 已验证代码是否存在于数据库中并且在查询中正确传递。 检查路由定义中是否存在任何可能的拼写错误或错误配置。
这是自定义控制器的代码:
const { createCoreController } = require('@strapi/strapi').factories;
module.exports = createCoreController('api::reserve.reserve', ({ strapi }) => ({
async search(ctx) {
try {
const { code } = ctx.query;
if (!code) {
return ctx.badRequest('کد پیگیری مورد نیاز است.');
}
const entity = await strapi.entityService.findMany('api::reserve.reserve', {
filters: { code },
});
if (!entity.length) {
return ctx.notFound('هیچ رزروی با این کد پیگیری یافت نشد.');
}
return entity;
} catch (err) {
return ctx.internalServerError('خطا در پردازش درخواست');
}
},
}));
以及自定义路由定义:
module.exports = {
routes: [
{
method: 'GET',
path: '/reserves/search',
handler: 'reserve.search',
config: {
auth: false,
},
},
],
};
我已将路由定义放在 /app/src/api/reserve/routes/reserves.js 中。
问题:
即使路由似乎定义正确,但 404 Not Found 响应可能是什么原因? 设置自定义搜索端点时,Strapi 中是否存在我可能会忽略的错误配置? 我将非常感谢您为解决此问题提供的任何帮助或见解。
提前谢谢您!
最重要的是,我想知道如何为此制作自定义控制器和根。
我尝试复制您的问题,但结果与您的不同。 如果自定义路由设置不正确,我会收到 403 错误。当查询结果没有找到数据时,就会出现 404 错误。
此外,您用于自定义路由的文件名似乎不正确,默认核心路由(reserve.js)将在自定义路由(reserve.js)之前加载
路线文件按字母顺序加载。要在核心路由之前加载自定义路由,请确保适当地命名自定义路由(例如 01-custom-routes.js 和 02-core-routes.js)。
https://docs.strapi.io/dev-docs/backend-customization/routes
自定义路线可以参考这个例子: https://dev.to/justinkarso/strapi-v4-extend-core-controller-and-create-custom-routes-18kc