AstroJS中使用Strapi findOne获取单条记录的两个问题
关于Strapi findOne函数的两个问题解答
问题1:示例中的api::blog.article是什么?
这是Strapi的内容类型唯一标识符,格式固定为api::<api模块名>::<内容类型名>:
api:::标识这是自定义API模块下的内容类型blog:对应Strapi项目里src/api/blog这个API文件夹的名称article:是该API文件夹下的内容类型名称(对应src/api/blog/content-types/article目录)
你的Teams表对应的标识符,要看创建内容类型时的设置:
- 如果直接创建的是单数形式的
Team内容类型,默认标识符是api::team.team - 即便创建时用了复数
Teams,Strapi通常会自动映射为单数形式的标识符 - 你可以直接去Strapi后台的「内容类型生成器」里找到Teams,查看它的API标识符;或者看项目
src/api目录的文件夹结构,比如存在team文件夹且内部有content-types/team,那标识符就是api::team.team
问题2:为什么会出现strapi is not defined错误?
因为strapi.db.query是Strapi服务器端专属代码,只能在Strapi项目内部的自定义控制器、服务、生命周期钩子等后端代码里使用,前端环境(比如你的AstroJS项目)里不存在strapi这个全局对象。
你之前用fetch调用Strapi的REST API是正确的前端调用方式,要获取单个Team条目,有两种可行方案:
- 已知目标Team的ID,直接调用单条目接口:
const response = await fetch("http://127.0.0.1:1337/api/teams/123?populate=*"); // 将123替换为实际ID const { data } = await response.json();
- 通过筛选条件获取单个匹配结果(比如按name匹配):
const response = await fetch("http://127.0.0.1:1337/api/teams?filters[name][$eq]=john&populate=*"); const { data } = await response.json(); const targetTeam = data[0]; // 取第一个匹配结果
内容的提问来源于stack exchange,提问作者Sebastien Desemberg
相关产品推荐
相关产品推荐

