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+vue实现用户注册和头像上传的实例代码

    node+vue实现用户注册和头像上传的实例代码

    本篇文章主要介绍了node+vue实现用户注册和头像上传的实例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • 前端npm发包的完整流程及避坑指南

    前端npm发包的完整流程及避坑指南

    无论是使用第三方库还是创建和分享自己的工具,npm都为我们提供了一个强大而便捷的平台,然而很多开发者在将自己的代码发布到npm上时往往面临各种困惑和挑战,本篇文章将从准备工作到发布上线,探讨如何让npm包更易发布及避免常见的坑,确保你开发流程更加顺畅
    2025-05-05
  • 详解如何使用Node.js实现热重载页面

    详解如何使用Node.js实现热重载页面

    这篇文章主要介绍了详解如何使用Node.js实现热重载页面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Node.js的路由、EJS模板引擎、GET和POST请求讲解

    Node.js的路由、EJS模板引擎、GET和POST请求讲解

    这篇文章介绍了Node.js的路由、EJS模板引擎、GET和POST请求,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • koa router 多文件引入的方法示例

    koa router 多文件引入的方法示例

    这篇文章主要介绍了koa router 多文件引入的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • nvm下载后nodejs版本自由切换node14却根本下载不了的解决办法

    nvm下载后nodejs版本自由切换node14却根本下载不了的解决办法

    在日常开发中,我们可能需要同时进行多个不同NodeJS版本的项目开发,每个项目所依赖的nodejs版本可能不一致,这篇文章主要介绍了nvm下载后nodejs版本自由切换node14却根本下载不了的解决办法,需要的朋友可以参考下
    2025-12-12
  • 通过Nodejs搭建网站简单实现注册登录流程

    通过Nodejs搭建网站简单实现注册登录流程

    这篇文章主要介绍了通过Nodejs搭建网站简单实现注册登录流程,Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。,需要的朋友可以参考下
    2019-06-06
  • node.js平台下的mysql数据库配置及连接

    node.js平台下的mysql数据库配置及连接

    本文主要介绍了node.js平台下的mysql数据库配置及连接的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • nodejs子进程child_process和cluster模块深入解析

    nodejs子进程child_process和cluster模块深入解析

    本文从node的单线程单进程的理解触发,介绍了child_process模块和cluster模块,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Nodejs中JSON和YAML互相转换方式

    Nodejs中JSON和YAML互相转换方式

    这篇文章主要介绍了Nodejs中JSON和YAML互相转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03

最新评论