👉 访问 DatoCMS 主页 或见 达多CMS是什么?
@datocms/cda-客户端
一个轻量级, TypeScript 已准备好的软件包, 提供本地获取 API 周围的各种帮助, 执行 GraphQL 对 DatoCMS 的请求 内容交付 API。 。 。 .
类型脚本支持
此软件包用TypeScript来构建,并提供出框的类型定义. 它支持 TypedDocumentNode 在使用时改进类型推论 gql.tada (英语), (中文(简体) ), GraphQL 代码生成器 或类似的工具.
实例
基本查询执行
import { executeQuery } from "@datocms/cda-client";
const query = `
query {
allArticles {
id
title
}
}
`;
const result = await executeQuery(query, {
token: "your-api-token-here",
});
console.log(result);
使用类型脚本和图形QL 代码生成器
import { executeQuery } from "@datocms/cda-client";
import { AllArticlesQuery } from "./generated/graphql";
const result = await executeQuery(AllArticlesQuery, {
token: "your-api-token-here",
variables: {
limit: 10,
},
});
console.log(result.allArticles);
安装
npm install @datocms/cda-client
使用量
此软件包提供了多个工具功能来帮助您使用GraphQL与 DatoCMS 内容交付 API 交互.
executeQuery
针对 DatoCMS 内容交付 API 执行 GraphQL 查询的主要功能 .
import { executeQuery } from "@datocms/cda-client";
const result = await executeQuery(query, options);
参数
query: GraphQL 查询字符串,DocumentNode,或TypedDocumentNode。 。 。 .options: 包含执行选项的对象.
选项
| 选项 | 类型 | 说明 |
|---|---|---|
token | string | DatoCMS API 令牌( 需要) 更多信息 |
includeDrafts | boolean | 如果真实, 返回记录草稿 更多信息 |
excludeInvalid | boolean | 如果选中的话, 过滤无效的记录 更多信息 |
environment | string | 查询的 DatoCMS 环境名称 更多信息 |
contentLink | 'vercel-v1' | 如果真实, 嵌入内容链接的元数据 更多信息 |
baseEditingUrl | string | 您的 DatoCMS 项目的基础 URL 更多信息 |
returnCacheTags | boolean | 如果为真, 则接收与查询相关的缓存标记 更多信息 |
variables | object | 要随查询一起发送的变量 |
fetchFn | function | 自定义获取函数( 可选) |
requestInitOptions | Partial<RequestInit> | 附加请求初始化选项( 可选) |
autoRetry | boolean | 自动重试速度限制( 默认: 真) |
rawExecuteQuery
类似 executeQuery,但返回查询结果和完整的响应对象。 当与 returnCacheTags 一起用于实际取回缓存标记时,此功能可以方便.
import { rawExecuteQuery } from "@datocms/cda-client";
const [result, response] = await rawExecuteQuery(query, {
token: "your-api-token-here",
returnCacheTags: true,
});
const cacheTags = response.headers.get("x-cache-tags");
executeQueryWithAutoPagination
当查询包含一个 pagized 收藏时, 此函数会很方便: 幕后,
executeQueryWithAutoPagination 重修经过的查询并收集结果,以便
有可能获得超过Content Express API结果限制的唱片集合.
以透明的方式,用一个API的单一电话进行.
import { executeQueryWithAutoPagination } from "@datocms/cda-client";
const result = await executeQueryWithAutoPagination(query, options);
参数
参数相同,可用于: executeQuery数字 :
query: GraphQL 查询字符串,DocumentNode,或TypedDocumentNode。 。 。 .options: 包含具有相同形状的选项执行对象executeQuery。 。 。 .
怎么会这样?
假设您想要在模型上执行以下查询: 2500 记录 :
query BuildSitemapUrls {
allBlogPosts {
slug
}
entries: allSuccessStories(first: 2500) {
...SuccessStoryUrlFragment
}
}
fragment SuccessStoryUrlFragment on SuccessStoryRecord {
slug
}
嗯,这是一个路障: CDA仅限于最多返回 500 一次的项目。 若想取取多取会出错. 相反,如果你想要得到所有 2500 记录中,通常您需要手动粘贴,执行多次查询,每次递增 skip 参数增加500。 干得可厉害了!
幸运的是, 帮助者的作用 executeQueryWithAutoPagination 以您的名义进行: 对上述查询进行分析,并像这样在苍蝇上重写:
query BuildSitemapUrls {
allBlogPosts {
slug
}
splitted_0_entries: allSuccessStories(first: 500, skip: 0) {
...SuccessStoryUrlFragment
}
splitted_500_entries: allSuccessStories(first: 500, skip: 500) {
...SuccessStoryUrlFragment
}
splitted_1000_entries: allSuccessStories(first: 500, skip: 1000) {
...SuccessStoryUrlFragment
}
splitted_1500_entries: allSuccessStories(first: 500, skip: 1500) {
...SuccessStoryUrlFragment
}
splitted_2000_entries: allSuccessStories(first: 500, skip: 2000) {
...SuccessStoryUrlFragment
}
}
fragment SuccessStoryUrlFragment on SuccessStoryRecord {
slug
}
一旦执行,结果就会被收集和重新组合,仿佛什么都没有发生.
限制
executeQueryWithAutoPagination 只有在查询中只包含一个选择
超规模 first: 参数(即: first: 参数超过了内容交付 API 的结果限制 500) (中文(简体) ).
如果两个或两个以上请求的模型有超大小的 pagination,函数会返回一个错误.
重写的查询仍必须尊重 图QL复杂成本。 。 。 .
rawExecuteQueryWithAutoPagination
至于 executeQuery,还有 executeQueryWithAutoPagination 拥有一对原始版本,既返回查询结果,又返回完整响应对象.
当与 returnCacheTags 一起用于实际取回缓存标记时,此功能可以方便.
import { rawExecuteQueryWithAutoPagination } from "@datocms/cda-client";
const [result, response] = await rawExecuteQueryWithAutoPagination(query, {
token: "your-api-token-here",
returnCacheTags: true,
});
const cacheTags = response.headers.get("x-cache-tags");
buildRequestHeaders
构建面向 DatoCMS 内容交付 API 的 GraphQL 查询请求头 .
import { buildRequestHeaders } from "@datocms/cda-client";
const headers = buildRequestHeaders(options);
选项
这个 buildRequestHeaders 函数接受的选项与 executeQuery时,除 variables, (中文(简体) ), fetchFn,以及 autoRetry。 。 。 .
buildRequestInit
向 DatoCMS 内容交付 API 创建 GraphQL 查询的请求初始化对象.
import { buildRequestInit } from "@datocms/cda-client";
const requestInit = buildRequestInit(query, options);
参数
query: 图QL 查询字符串或DocumentNode。 。 。 .options: 含有执行选项的对象(与executeQuery) (中文(简体) ).
处理错误
如果查询失败( 或使用 2xx 范围以外的 HTTP 状态代码, 或查询出错) , a ApiError 客户端会丢弃例外。 此错误包含请求和响应的所有细节, 允许您有效调试和处理错误 .
示例
import { executeQuery, ApiError } from "@datocms/cda-client";
const query = `
query {
allArticles {
id
title
}
}
`;
try {
const result = await executeQuery(query, {
token: "your-api-token-here",
});
console.log(result);
} catch (e) {
if (e instanceof ApiError) {
// Information about the failed request. The API token is redacted from
// `e.options`: an error tends to end up in logs and error trackers, which
// are no place for a token.
console.log(e.query);
console.log(e.options);
// Information about the response
console.log(e.response.status);
console.log(e.response.statusText);
console.log(e.response.headers);
console.log(e.response.body);
} else {
// Handle other types of errors
throw e;
}
}
捐款
欢迎捐款! 请随意提交拉力请求.
在发布前尝试改变
每推到这里的分行都会发布软件包的预览,您可以
任何地方安装——无 npm 发布,无 npm link数字 :
npm i https://pkg.pr.new/@datocms/cda-client@<commit-sha>
准确的 URL 出现在承诺的检查中 GitHub 上, 并出现在对 一旦出现拉力请求, 这是支持尝试改变的方法 在一个位于另一个存放处的场所里, 或者把一个固定给任何人 在释放前报告.
预览被丢弃:从未发布到 npm, URL停止
暂时解决。 永远不要把一个给一个 package.json 那个船.
释放(维护者)
每个用户可见的更改需要一个更改器: 运行 npx changeset 从还款
根在同一 PR 中,选择起伏级(patch 只用于错误修正, 新建 API
表面为 minor)并输入它所撰写的文件 .changeset/这是
更改日志条目的出处, 并且是决定起落关卡的地方
——放假当天不行. 见 .changeset/README.md。 。 。 .
释放,从最新,干净 main运行 npm run release。
构建和测试,应用待处理的更改器——接通版本和
写作 CHANGELOG.md ——发布到npm,只发布后标签 vX.Y.Z,推着,
并创建一个 GitHub 发布,其笔记直接来自该更改日志
输入。 中断的释放通过重新运行而恢复,永远不会被取消。 使用
npm run release:next 预释放 next dis.
脚本是
@datocms/release-toolchain, (中文(简体) ),
与其它所有 DatoCMS 存储器共享, 并在此被标记 .
许可证
这个项目根据麻省理工学院的许可证获得许可.
达多CMS是什么?
达多CMS 是现代网络的无头CMS。 由25,000+企业、机构和个人托管,它为您的团队提供了一个管理内容的地方,并通过API将其运送到任何网站、应用或设备.
新来的? 开始 创建自由账户 编辑 文档粘着? 问 社区好奇有什么新鲜事? 产品更新。 。 。 .
建筑与AI: 代理技能 将编码助理(Claude Code, Cursor)变成专家DatoCMS开发者,通过自动安装的CLI进行全读/写入. 没有本地终端? 使用 MCP 服务器 换句话说.
从代码对 DatoCMS 说话 :
- 内容交付 API (CDA) — 您的网站/应用程序的快速、 仅读 GraphQL API 获取 已发布内容.
- 内容管理 API (CMA) - REST API用于 创建和更新 内容、模型和项目设置(思维脚本、迁移、整合).
- 国 际 用于图解迁移和从Contentful/WordPress导入的终端工具.
框架指南: 用于获取内容、渲染结构文本、优化图像/视频、处理SIO和设置视频编辑的现场预览 下一个.js, (中文(简体) ), 坚果, (中文(简体) ), 丝绒,以及 天体。 。 。 .
要先开始吗? 浏览我们的 启动项目 ——热门框架的现成部署示范站点.