使用 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 或部署脚本中重复执行
这种方式特别适合新闻网站、博客、产品目录、跨语言项目等。