You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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条目,有两种可行方案:

  1. 已知目标Team的ID,直接调用单条目接口:
const response = await fetch("http://127.0.0.1:1337/api/teams/123?populate=*"); // 将123替换为实际ID
const { data } = await response.json();
  1. 通过筛选条件获取单个匹配结果(比如按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:00:22