JavaScript
放一些浏览器 / Node / 前端 JavaScript 小片段,目标也是复制后直接改。
浏览器批量点击模板
js
const nodeList = document.querySelectorAll('.icon-cover');
nodeList.forEach(node => {
node.querySelector('span')?.click();
});fetch 超时模板
js
async function fetchWithTimeout(url, options = {}, timeout = 5000) {
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), timeout);
try {
const response = await fetch(url, {
...options,
signal: controller.signal,
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
return await response.json();
} finally {
clearTimeout(timer);
}
}URL 参数模板
js
const query = {
pageNo: 1,
pageSize: 20,
userName: 'jerry',
};
const search = new URLSearchParams(
Object.entries(query).filter(([, value]) => value !== undefined && value !== null && value !== '')
).toString();
const url = `/api/users?${search}`;localStorage 安全读写模板
js
function setStorageJSON(key, value) {
localStorage.setItem(key, JSON.stringify(value));
}
function getStorageJSON(key, defaultValue = null) {
const raw = localStorage.getItem(key);
if (!raw) {
return defaultValue;
}
try {
return JSON.parse(raw);
} catch (error) {
console.error(`parse storage failed: ${key}`, error);
return defaultValue;
}
}复制到剪贴板模板
js
async function copyText(text) {
if (navigator.clipboard?.writeText) {
await navigator.clipboard.writeText(text);
return;
}
const textarea = document.createElement('textarea');
textarea.value = text;
textarea.style.position = 'fixed';
textarea.style.opacity = '0';
document.body.appendChild(textarea);
textarea.select();
document.execCommand('copy');
document.body.removeChild(textarea);
}下载 Blob 文件模板
js
function downloadBlob(blob, fileName) {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = fileName;
a.click();
URL.revokeObjectURL(url);
}
async function exportExcel() {
const response = await fetch('/api/report/export');
const blob = await response.blob();
downloadBlob(blob, 'report.xlsx');
}Node 读取环境变量模板
js
function requireEnv(name) {
const value = process.env[name];
if (!value) {
throw new Error(`missing env: ${name}`);
}
return value;
}
const appId = requireEnv('APP_ID');
const appSecret = requireEnv('APP_SECRET');