Node.js脚本实现批量导入多语言标签到Strapi

 更新时间:2025年12月01日 08:43:07   作者:程序员爱钓鱼  
在多语言网站开发中,我们常常需要在 Strapi 中维护大量的标签(Tags),本文将介绍如何使用 Node.js 脚本批量导入标签,并支持多语言(英文 / 德语 / 法语)与自动生成 slug,感兴趣的可以了解下

在多语言网站开发中,我们常常需要在 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导入标签内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈手写node可读流之流动模式

    浅谈手写node可读流之流动模式

    这篇文章主要介绍了浅谈手写node可读流之流动模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Egret引擎开发指南之编译项目

    Egret引擎开发指南之编译项目

    Egret框架是一个基于MIT开源协议许可的永久免费的项目!你可以在项目中随意使用且修改它,并且拥有100%的控制权。你可以从Egret的Github网站获取它的源代码,从而了解和学习它的核心细节。Egret具有完善的文档,并且易于上手学习,可以让你更容易专注于游戏本身的开发
    2014-09-09
  • nodejs使用PassThrough流进行数据传递合并示例详解

    nodejs使用PassThrough流进行数据传递合并示例详解

    这篇文章主要为大家介绍了nodejs使用PassThrough流进行数据传递合并示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Node.js 使用递归实现遍历文件夹中所有文件

    Node.js 使用递归实现遍历文件夹中所有文件

    这篇文章主要介绍了Node.js使用递归实现遍历文件夹中所有文件,需要的朋友可以参考下
    2017-09-09
  • 一文秒懂nodejs中的异步编程

    一文秒懂nodejs中的异步编程

    这篇文章主要介绍了深入理解nodejs中的异步编程,本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • npm版本升级的全流程操作

    npm版本升级的全流程操作

    作为前端开发者,npm是我们日常工作中不可或缺的工具,定期升级npm不仅能获得新特性支持,还能享受性能优化和安全补丁,本文将通过实际案例演示如何正确升级npm,并解析常见问题,需要的朋友可以参考下
    2025-05-05
  • 深入解读Node.js中的koa源码

    深入解读Node.js中的koa源码

    这篇文章主要介绍了深入解读Node.js中的koa源码,任何一个框架的出现都是为了解决问题,而Koa则是为了更方便的构建http服务而出现的。 可以简单的理解为一个HTTP服务的中间件框架。,需要的朋友可以参考下
    2019-06-06
  • 详解本地Node.js服务器作为api服务器的解决办法

    详解本地Node.js服务器作为api服务器的解决办法

    本篇文章主要介绍了详解本地Node.js服务器作为api服务器的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • node.js中module.exports与exports用法上的区别

    node.js中module.exports与exports用法上的区别

    Node.js 引入了模块(Module)概念,一个模块可以通过module.exports 或 exports 将函数、变量等导出,以使其它 JavaScript 脚本通过require() 函数引入并使用。那么node.js中module.exports与exports有什么区别呢?下面小编给大家解答下
    2016-09-09
  • Node.js的cross-env工具包使用介绍

    Node.js的cross-env工具包使用介绍

    这篇文章主要为大家介绍了Node.js的cross-env工具包使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论