最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js腳本實(shí)現(xiàn)批量導(dǎo)入多語(yǔ)言標(biāo)簽到Strapi

 更新時(shí)間:2025年12月01日 08:43:07   作者:程序員愛(ài)釣魚  
在多語(yǔ)言網(wǎng)站開(kāi)發(fā)中,我們常常需要在?Strapi?中維護(hù)大量的標(biāo)簽(Tags),本文將介紹如何使用?Node.js?腳本批量導(dǎo)入標(biāo)簽,并支持多語(yǔ)言(英文?/?德語(yǔ)?/?法語(yǔ))與自動(dòng)生成?slug,感興趣的可以了解下

在多語(yǔ)言網(wǎng)站開(kāi)發(fā)中,我們常常需要在 Strapi 中維護(hù)大量的標(biāo)簽(Tags),比如文章標(biāo)簽、產(chǎn)品分類標(biāo)簽等。如果手動(dòng)在后臺(tái)創(chuàng)建上百條標(biāo)簽,會(huì)非常耗時(shí)且容易出錯(cuò)。本文將介紹如何使用 Node.js 腳本批量導(dǎo)入標(biāo)簽,并支持多語(yǔ)言(英文 / 德語(yǔ) / 法語(yǔ))與自動(dòng)生成 slug。

一、項(xiàng)目背景

假設(shè)我們有一個(gè) Next.js + Strapi 項(xiàng)目,Strapi 作為內(nèi)容管理系統(tǒng)(CMS),我們希望:

  • 批量導(dǎo)入 1000+ 標(biāo)簽
  • 支持多語(yǔ)言(en / de / fr)
  • 自動(dòng)生成 URL slug
  • 避免重復(fù)創(chuàng)建

為了實(shí)現(xiàn)這些目標(biāo),我們可以寫一個(gè) Node.js 腳本,調(diào)用 Strapi 的 REST API 來(lái)批量創(chuàng)建標(biāo)簽。

二、準(zhǔn)備工作

獲取 Strapi API Token 在 Strapi 后臺(tái)創(chuàng)建一個(gè) API Token,選擇 Full Access 或者至少有 Tags CRUD 權(quán)限。 在項(xiàng)目根目錄創(chuàng)建 .env 文件:

STRAPI_API_URL=https://your-strapi-domain.com
STRAPI_API_TOKEN=YOUR_API_TOKEN

安裝依賴

npm install node-fetch@2 dotenv

準(zhǔn)備標(biāo)簽數(shù)據(jù) 我們將標(biāo)簽寫成 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 的核心實(shí)現(xiàn):

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. 創(chuàng)建英文標(biāo)簽

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. 創(chuàng)建德語(yǔ)和法語(yǔ)本地化

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,保證不同語(yǔ)言之間的標(biāo)簽關(guān)聯(lián)。

3. 批量處理與防刷限流

for (let i = 0; i < tags.length; i++) {
  await createTag(tags[i], i + 1);
  await sleep(200); // 避免 API 請(qǐng)求過(guò)快
}

四、運(yùn)行腳本

node import_tags_to_strapi.js

執(zhí)行后,你會(huì)看到:

1 created EN id= 15
1 created DE localization
1 created FR localization
2 created EN id= 16
...
done import

五、注意事項(xiàng)

API Token 權(quán)限:確保 Token 有 Tag 的讀寫權(quán)限。

slug 唯一性:Strapi 對(duì) slug 有唯一性要求,建議提前生成或使用 slugify。

請(qǐng)求頻率:一次導(dǎo)入大量標(biāo)簽時(shí),增加 sleep 時(shí)間可避免 Strapi 報(bào) 429。

多語(yǔ)言管理:Localizations API 保證標(biāo)簽在多語(yǔ)言之間關(guān)聯(lián),便于前端展示。

六、總結(jié)

通過(guò) Node.js 腳本批量導(dǎo)入 Strapi 標(biāo)簽可以大幅提高效率,并且可以:

  • 支持上千條標(biāo)簽
  • 自動(dòng)生成 slug
  • 支持多語(yǔ)言
  • 可在 CI/CD 或部署腳本中重復(fù)執(zhí)行

這種方式特別適合新聞網(wǎng)站、博客、產(chǎn)品目錄、跨語(yǔ)言項(xiàng)目等。

到此這篇關(guān)于Node.js腳本實(shí)現(xiàn)批量導(dǎo)入多語(yǔ)言標(biāo)簽到Strapi的文章就介紹到這了,更多相關(guān)Node.js導(dǎo)入標(biāo)簽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • node+vue實(shí)現(xiàn)用戶注冊(cè)和頭像上傳的實(shí)例代碼

    node+vue實(shí)現(xiàn)用戶注冊(cè)和頭像上傳的實(shí)例代碼

    本篇文章主要介紹了node+vue實(shí)現(xiàn)用戶注冊(cè)和頭像上傳的實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • 前端npm發(fā)包的完整流程及避坑指南

    前端npm發(fā)包的完整流程及避坑指南

    無(wú)論是使用第三方庫(kù)還是創(chuàng)建和分享自己的工具,npm都為我們提供了一個(gè)強(qiáng)大而便捷的平臺(tái),然而很多開(kāi)發(fā)者在將自己的代碼發(fā)布到npm上時(shí)往往面臨各種困惑和挑戰(zhàn),本篇文章將從準(zhǔn)備工作到發(fā)布上線,探討如何讓npm包更易發(fā)布及避免常見(jiàn)的坑,確保你開(kāi)發(fā)流程更加順暢
    2025-05-05
  • 詳解如何使用Node.js實(shí)現(xiàn)熱重載頁(yè)面

    詳解如何使用Node.js實(shí)現(xiàn)熱重載頁(yè)面

    這篇文章主要介紹了詳解如何使用Node.js實(shí)現(xiàn)熱重載頁(yè)面,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Node.js的路由、EJS模板引擎、GET和POST請(qǐng)求講解

    Node.js的路由、EJS模板引擎、GET和POST請(qǐng)求講解

    這篇文章介紹了Node.js的路由、EJS模板引擎、GET和POST請(qǐng)求,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • koa router 多文件引入的方法示例

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

    這篇文章主要介紹了koa router 多文件引入的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • nvm下載后nodejs版本自由切換node14卻根本下載不了的解決辦法

    nvm下載后nodejs版本自由切換node14卻根本下載不了的解決辦法

    在日常開(kāi)發(fā)中,我們可能需要同時(shí)進(jìn)行多個(gè)不同NodeJS版本的項(xiàng)目開(kāi)發(fā),每個(gè)項(xiàng)目所依賴的nodejs版本可能不一致,這篇文章主要介紹了nvm下載后nodejs版本自由切換node14卻根本下載不了的解決辦法,需要的朋友可以參考下
    2025-12-12
  • 通過(guò)Nodejs搭建網(wǎng)站簡(jiǎn)單實(shí)現(xiàn)注冊(cè)登錄流程

    通過(guò)Nodejs搭建網(wǎng)站簡(jiǎn)單實(shí)現(xiàn)注冊(cè)登錄流程

    這篇文章主要介紹了通過(guò)Nodejs搭建網(wǎng)站簡(jiǎn)單實(shí)現(xiàn)注冊(cè)登錄流程,Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。 Node.js 使用了一個(gè)事件驅(qū)動(dòng)、非阻塞式 I/O 的模型,使其輕量又高效。,需要的朋友可以參考下
    2019-06-06
  • node.js平臺(tái)下的mysql數(shù)據(jù)庫(kù)配置及連接

    node.js平臺(tái)下的mysql數(shù)據(jù)庫(kù)配置及連接

    本文主要介紹了node.js平臺(tái)下的mysql數(shù)據(jù)庫(kù)配置及連接的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • nodejs子進(jìn)程child_process和cluster模塊深入解析

    nodejs子進(jìn)程child_process和cluster模塊深入解析

    本文從node的單線程單進(jìn)程的理解觸發(fā),介紹了child_process模塊和cluster模塊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Nodejs中JSON和YAML互相轉(zhuǎn)換方式

    Nodejs中JSON和YAML互相轉(zhuǎn)換方式

    這篇文章主要介紹了Nodejs中JSON和YAML互相轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評(píng)論

平遥县| 阿尔山市| 西峡县| 竹山县| 江城| 左贡县| 敖汉旗| 卫辉市| 横峰县| 深泽县| 佳木斯市| 德阳市| 云龙县| 永泰县| 安义县| 丽江市| 清新县| 灵寿县| 深州市| 彩票| 郯城县| 舟山市| 自贡市| 舟曲县| 漳州市| 博爱县| 德江县| 山阳县| 余庆县| 扎囊县| 南郑县| 万山特区| 繁峙县| 荆州市| 青阳县| 五莲县| 滨海县| 清流县| 双辽市| 彰化县| 肥城市|