Strapi4无关联内容类型的自定义API端点返回404错误求助
解决Strapi无内容类型自定义API端点404问题
以下是针对你代码问题的分步修复方案:
1. 修正路由配置
Strapi v4中,路由文件需确保结构正确,避免加载异常导致404。可以调整为以下两种标准写法之一:
写法一:直接定义完整路径
// src/api/lpv-banner-data/routes/lpv-banner-data.js module.exports = { routes: [ { method: 'GET', path: '/lpv-banner-data', handler: 'lpv-banner-data.fetchData', config: { policies: [], middlewares: [], auth: false, // 临时关闭权限验证快速测试,确认后再配置角色权限 }, }, ], };
写法二:使用prefix配置
module.exports = { prefix: '/lpv-banner-data', routes: [ { method: 'GET', path: '/', handler: 'lpv-banner-data.fetchData', config: { policies: [], middlewares: [], auth: false, }, }, ], };
2. 修复控制器语法错误
控制器中ctx.body("data", data)是错误写法,ctx.body是赋值属性而非函数,正确写法如下:
// src/api/lpv-banner-data/controllers/lpv-banner-data.js 'use strict'; module.exports = { async fetchData(ctx) { try { const data = await strapi.service("api::lpv-banner-data.lpv-banner-data").fetchData(); console.log(data); ctx.body = { data }; // 直接赋值响应体 ctx.status = 200; // 显式设置成功状态码 } catch (err) { ctx.badRequest("Post report controller error", { error: err.message }); } } };
3. 修复服务逻辑错误
服务代码存在两处明显问题:未定义的getPropertyTypes、多余的.json()调用(axios已自动解析响应),修复后代码:
// src/api/lpv-banner-data/services/lpv-banner-data.js 'use strict'; const axios = require('axios'); module.exports = { async fetchData() { try { const response = await axios.get('https://api-endpoint'); // 替换为真实外部API地址 return response.data; // 直接返回外部API数据 } catch (err) { throw new Error(`Failed to fetch external data: ${err.message}`); // 抛出错误交由控制器统一处理 } } };
4. 后续验证步骤
- 重启Strapi服务器:修改路由、控制器或服务后必须重启,否则新配置不会生效
- 确认访问路径:正确路径应为
http://localhost:1337/api/lpv-banner-data(默认端口) - 配置权限:测试通过后,在Strapi后台设置→角色与权限中,给目标角色开启
lpv-banner-data的fetchData权限
内容的提问来源于stack exchange,提问作者jamjam
相关产品推荐
相关产品推荐

