Node.js脚本实现批量导入多语言标签到Strapi
作者:程序员爱钓鱼
在多语言网站开发中,我们常常需要在 Strapi 中维护大量的标签(Tags),比如文章标签、产品分类标签等。如果手动在后台创建上百条标签,会非常耗时且容易出错。本文将介绍如何使用 Node.js 脚本批量导入标签,并支持多语言(英文 / 德语 / 法语)与自动生成 slug。
一、项目背景
假设我们有一个 Next.js + Strapi 项目,Strapi 作为内容管理系统(CMS),我们希望:
- 批量导入 1000+ 标签
- 支持多语言(en / de / fr)
- 自动生成 URL slug
- 避免重复创建
为了实现这些目标,我们可以写一个 Node.js 脚本,调用 Strapi 的 REST API 来批量创建标签。
二、准备工作
获取 Strapi API Token 在 Strapi 后台创建一个 API Token,选择 Full Access 或者至少有 Tags CRUD 权限。 在项目根目录创建 .env 文件:
STRAPI_API_URL=https://your-strapi-domain.com STRAPI_API_TOKEN=YOUR_API_TOKEN
安装依赖
npm install node-fetch@2 dotenv
准备标签数据 我们将标签写成 tags.json 文件,示例:
{
"tags": [
{
"title_en": "Economy",
"title_de": "Wirtschaft",
"title_fr": "Économie",
"slug_en": "economy",
"slug_de": "wirtschaft",
"slug_fr": "economie"
},
{
"title_en": "Technology",
"title_de": "Technologie",
"title_fr": "Technologie",
"slug_en": "technology",
"slug_de": "technologie",
"slug_fr": "technologie"
}
]
}
三、核心脚本解析
以下是 import_tags_to_strapi.js 的核心实现:
const fs = require('fs');
const fetch = require('node-fetch'); // npm install node-fetch@2
require('dotenv').config();
const STRAPI_URL = process.env.STRAPI_API_URL || 'http://localhost:1337';
const TOKEN = process.env.STRAPI_API_TOKEN;
const raw = fs.readFileSync('tags.json', 'utf8');
const { tags } = JSON.parse(raw);
// helper: sleep
const sleep = (ms) => new Promise((res) => setTimeout(res, ms));
1. 创建英文标签
const enBody = {
data: {
title: tagObj.title_en,
slug: tagObj.slug_en
}
};
await fetch(`${STRAPI_URL}/api/tags?populate=none`, {
method: 'POST',
headers: {
Authorization: `Bearer ${TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(enBody)
});
2. 创建德语和法语本地化
const deBody = {
data: { title: tagObj.title_de, slug: tagObj.slug_de },
locale: 'de'
};
await fetch(`${STRAPI_URL}/api/tags/${createdId}/localizations`, { ... });
const frBody = {
data: { title: tagObj.title_fr, slug: tagObj.slug_fr },
locale: 'fr'
};
await fetch(`${STRAPI_URL}/api/tags/${createdId}/localizations`, { ... });
这里使用了 Strapi Localizations API,保证不同语言之间的标签关联。
3. 批量处理与防刷限流
for (let i = 0; i < tags.length; i++) {
await createTag(tags[i], i + 1);
await sleep(200); // 避免 API 请求过快
}
四、运行脚本
node import_tags_to_strapi.js
执行后,你会看到:
1 created EN id= 15
1 created DE localization
1 created FR localization
2 created EN id= 16
...
done import
五、注意事项
API Token 权限:确保 Token 有 Tag 的读写权限。
slug 唯一性:Strapi 对 slug 有唯一性要求,建议提前生成或使用 slugify。
请求频率:一次导入大量标签时,增加 sleep 时间可避免 Strapi 报 429。
多语言管理:Localizations API 保证标签在多语言之间关联,便于前端展示。
六、总结
通过 Node.js 脚本批量导入 Strapi 标签可以大幅提高效率,并且可以:
- 支持上千条标签
- 自动生成 slug
- 支持多语言
- 可在 CI/CD 或部署脚本中重复执行
这种方式特别适合新闻网站、博客、产品目录、跨语言项目等。
到此这篇关于Node.js脚本实现批量导入多语言标签到Strapi的文章就介绍到这了,更多相关Node.js导入标签内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
