JS中导出Storyblok空间遇401及相关操作问题咨询
Storyblok管理API使用问题解决方案
一、401错误修复及正确调用语法
你的401错误主要由请求头格式错误和令牌权限配置问题导致,修正后的代码如下:
const spaceId = "你的空间ID"; // 优先使用空间专属管理令牌,而非个人访问令牌(需确保令牌拥有空间管理权限) const managementToken = "你的管理令牌"; fetch( `https://mapi.storyblok.com/v2/spaces/${spaceId}/export.json`, { method: "GET", headers: { // 必须添加Bearer前缀,这是401的核心原因 Authorization: `Bearer ${managementToken}`, "Content-Type": "application/json" }, } ) .then(async (res) => { if (!res.ok) throw new Error(`请求失败:${res.status}`); const json = await res.json(); console.log(json); }) .catch((err) => console.error(err));
关键注意事项:
- 令牌选择:优先用空间设置里的「空间管理令牌」(路径:空间设置 → API密钥);若用个人访问令牌,需手动为该令牌分配目标空间的管理权限,否则会触发权限拦截。
- 域名问题:美国区域的管理API无需加
-us后缀,保持https://mapi.storyblok.com即可。
二、获取数字型storyId
你需要的8位数字storyId可通过两种方式获取:
- 编辑页面URL:打开故事编辑界面,URL格式为
app.storyblok.com/#!/edit/[数字ID]/...,中间的数字串就是storyId。 - API查询:调用管理API的故事列表接口
https://mapi.storyblok.com/v2/spaces/${spaceId}/stories,返回的每个story对象中id字段即为数字ID(uid是自定义标识符,无法用于导出接口)。
三、适配后续操作(增改故事、恢复空间)
上述修正的请求配置可直接复用在所有管理API操作中:
- 增改故事:使用
POST/PUT请求对应接口,保持相同的Authorization头格式。 - 恢复空间:调用导入接口时,确保令牌拥有空间写入权限,请求头规则一致。
- Nuxt3中可封装工具函数统一处理,示例:
// utils/storyblokManagement.js export const useStoryblokManagement = () => { const config = useRuntimeConfig(); const baseUrl = "https://mapi.storyblok.com/v2"; const headers = { Authorization: `Bearer ${config.public.storyblokManagementToken}`, "Content-Type": "application/json" }; return { // 导出整个空间 async fetchSpaceExport(spaceId) { const res = await fetch(`${baseUrl}/spaces/${spaceId}/export.json`, { headers }); if (!res.ok) throw new Error(res.statusText); return res.json(); }, // 更新故事 async updateStory(spaceId, storyId, storyData) { const res = await fetch(`${baseUrl}/spaces/${spaceId}/stories/${storyId}`, { method: "PUT", headers, body: JSON.stringify({ story: storyData }) }); return res.json(); } // 可扩展恢复空间等其他方法 }; };
内容的提问来源于stack exchange,提问作者Paulie
相关产品推荐
相关产品推荐

