Node.js腳本實(shí)現(xiàn)批量導(dǎo)入多語言標(biāo)簽到Strapi
在多語言網(wǎng)站開發(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)簽,并支持多語言(英文 / 德語 / 法語)與自動(dòng)生成 slug。
一、項(xiàng)目背景
假設(shè)我們有一個(gè) Next.js + Strapi 項(xiàng)目,Strapi 作為內(nèi)容管理系統(tǒng)(CMS),我們希望:
- 批量導(dǎo)入 1000+ 標(biāo)簽
- 支持多語言(en / de / fr)
- 自動(dòng)生成 URL slug
- 避免重復(fù)創(chuàng)建
為了實(shí)現(xiàn)這些目標(biāo),我們可以寫一個(gè) Node.js 腳本,調(diào)用 Strapi 的 REST API 來批量創(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)建德語和法語本地化
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,保證不同語言之間的標(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 請求過快
}
四、運(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 對 slug 有唯一性要求,建議提前生成或使用 slugify。
請求頻率:一次導(dǎo)入大量標(biāo)簽時(shí),增加 sleep 時(shí)間可避免 Strapi 報(bào) 429。
多語言管理:Localizations API 保證標(biāo)簽在多語言之間關(guān)聯(lián),便于前端展示。
六、總結(jié)
通過 Node.js 腳本批量導(dǎo)入 Strapi 標(biāo)簽可以大幅提高效率,并且可以:
- 支持上千條標(biāo)簽
- 自動(dòng)生成 slug
- 支持多語言
- 可在 CI/CD 或部署腳本中重復(fù)執(zhí)行
這種方式特別適合新聞網(wǎng)站、博客、產(chǎn)品目錄、跨語言項(xiàng)目等。
到此這篇關(guān)于Node.js腳本實(shí)現(xiàn)批量導(dǎo)入多語言標(biāo)簽到Strapi的文章就介紹到這了,更多相關(guān)Node.js導(dǎo)入標(biāo)簽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nodejs使用PassThrough流進(jìn)行數(shù)據(jù)傳遞合并示例詳解
這篇文章主要為大家介紹了nodejs使用PassThrough流進(jìn)行數(shù)據(jù)傳遞合并示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Node.js 使用遞歸實(shí)現(xiàn)遍歷文件夾中所有文件
這篇文章主要介紹了Node.js使用遞歸實(shí)現(xiàn)遍歷文件夾中所有文件,需要的朋友可以參考下2017-09-09
詳解本地Node.js服務(wù)器作為api服務(wù)器的解決辦法
本篇文章主要介紹了詳解本地Node.js服務(wù)器作為api服務(wù)器的解決辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
node.js中module.exports與exports用法上的區(qū)別
Node.js 引入了模塊(Module)概念,一個(gè)模塊可以通過module.exports 或 exports 將函數(shù)、變量等導(dǎo)出,以使其它 JavaScript 腳本通過require() 函數(shù)引入并使用。那么node.js中module.exports與exports有什么區(qū)別呢?下面小編給大家解答下2016-09-09

