74 lines
2.7 KiB
JavaScript
74 lines
2.7 KiB
JavaScript
const NOCODB_CONFIG = {
|
|
// Token and URL are loaded from env.js (ENV_SECRETS global variable)
|
|
TOKEN: (typeof ENV_SECRETS !== 'undefined' && ENV_SECRETS.NOCODB_TOKEN) ? ENV_SECRETS.NOCODB_TOKEN : "",
|
|
LIST_URL: (typeof ENV_SECRETS !== 'undefined' && ENV_SECRETS.NOCODB_LIST_URL) ? ENV_SECRETS.NOCODB_LIST_URL : "",
|
|
FIELD_ID: (typeof ENV_SECRETS !== 'undefined' && ENV_SECRETS.NOCODB_FIELD_ID) ? ENV_SECRETS.NOCODB_FIELD_ID : "账号ID",
|
|
FIELD_ALIAS: (typeof ENV_SECRETS !== 'undefined' && ENV_SECRETS.NOCODB_FIELD_ALIAS) ? ENV_SECRETS.NOCODB_FIELD_ALIAS : "_最终输出"
|
|
};
|
|
|
|
/**
|
|
* 从 NocoDB 获取所有别名记录并整理为键值对
|
|
* @returns {Promise<Object>} { "账号ID": "别名", ... }
|
|
*/
|
|
async function fetchAliasesFromDB() {
|
|
const listUrl = NOCODB_CONFIG.LIST_URL;
|
|
const headers = {
|
|
"xc-token": NOCODB_CONFIG.TOKEN,
|
|
"Content-Type": "application/json"
|
|
};
|
|
|
|
if (!listUrl || !NOCODB_CONFIG.TOKEN) {
|
|
console.error("Teams Alias: 缺少配置 (URL 或 Token),请检查 .env 文件。");
|
|
throw new Error("Missing configuration");
|
|
}
|
|
|
|
let allAliases = {};
|
|
let offset = 0;
|
|
const limit = 1000;
|
|
|
|
try {
|
|
while (true) {
|
|
// 构建带参数的 URL
|
|
const url = new URL(listUrl);
|
|
url.searchParams.append("limit", limit);
|
|
url.searchParams.append("fields", `${NOCODB_CONFIG.FIELD_ID},${NOCODB_CONFIG.FIELD_ALIAS}`);
|
|
url.searchParams.append("offset", offset);
|
|
|
|
const response = await fetch(url.toString(), { headers });
|
|
|
|
if (!response.ok) {
|
|
console.error(`获取数据失败: ${response.status} ${response.statusText}`);
|
|
throw new Error("网络请求失败");
|
|
}
|
|
|
|
const data = await response.json();
|
|
const rows = data.list || [];
|
|
|
|
if (rows.length === 0) {
|
|
break;
|
|
}
|
|
|
|
// 整理数据
|
|
rows.forEach(row => {
|
|
if (row[NOCODB_CONFIG.FIELD_ID] && row[NOCODB_CONFIG.FIELD_ALIAS]) {
|
|
// key = 账号ID, value = _最终输出
|
|
allAliases[row[NOCODB_CONFIG.FIELD_ID]] = row[NOCODB_CONFIG.FIELD_ALIAS];
|
|
}
|
|
});
|
|
|
|
if (rows.length < limit) {
|
|
break; // 已获取所有数据
|
|
}
|
|
|
|
offset += limit;
|
|
}
|
|
|
|
console.log(`同步完成,共获取 ${Object.keys(allAliases).length} 条别名记录。`);
|
|
return allAliases;
|
|
|
|
} catch (error) {
|
|
console.error("同步别名数据时出错:", error);
|
|
throw error; // 向抛出以便调用者处理
|
|
}
|
|
}
|