随机诗词API实战:Vue项目接入完整示例与5个常见坑
一、写在前面为什么需要随机诗词API很多开发者想在个人网站、博客或管理后台的空白区域增加一点文化气息——随机展示一首古诗词既优雅又能缓解页面空洞感。但真正动手时却容易陷入几个困境找不到稳定又免费的诗词接口试了几个要么挂掉要么返回格式混乱前端跨域报错本地开发好好的部署后却拿不到数据没有做错误处理接口一旦超时或限流页面直接白屏随机逻辑太简陋每次刷新重复率高体验打折。本文以「今日诗词」这款公开免费的随机诗词API为例你同样可以在ApiZero等聚合平台上找到同类接口一步步带你完成从调试、封装到完整Vue组件开发的全流程并总结5个最容易被忽视的坑。代码全部可运行复制到项目里稍作修改就能用。二、API 选择与调试2.1 接口推荐我们选用https://v1.jinrishici.com/all.json这是一个长期维护的免费接口返回随机诗词包含诗句、出处、作者。你也可以在 ApiZero 平台上找到类似的随机诗词API并在线调试。两个平台都支持 HTTPS不需要申请key开箱即用。2.2 接口返回格式用浏览器或Postman请求该地址得到类似以下JSON{ content: 床前明月光疑是地上霜。, origin: 静夜思, author: 李白, category: 唐诗 }注若返回空或异常说明接口暂时不可用建议换用ApiZero上的备用接口。2.3 快速验证打开浏览器DevTools - Console直接执行fetch(https://v1.jinrishici.com/all.json) .then(res res.json()) .then(console.log) .catch(console.error)看到json对象就说明通了。三、Vue 项目集成步骤3.1 初始化项目 安装依赖# 用Vite创建Vue3项目 npm create vitelatest poetry-app -- --template vue cd poetry-app npm install # 安装请求库 npm install axios3.2 封装请求模块src/utils/request.jsimport axios from axios const api axios.create({ baseURL: https://v1.jinrishici.com, timeout: 5000 }) // 响应拦截器 api.interceptors.response.use( response { const data response.data // 统一处理业务码这里接口直接返回正文不需要额外逻辑 return data }, error { console.error(请求失败:, error.message) return Promise.reject(error) } ) export default api3.3 创建诗词API服务src/api/poetry.jsimport request from /utils/request export function getRandomPoetry() { return request.get(/all.json) }3.4 编写组件src/components/PoetryDisplay.vuetemplate div classpoetry-card div v-ifloading classloading正在为您寻诗.../div div v-else-iferror classerror p☹️ 诗意暂时迷路了/p button clickfetchPoetry再试一次/button /div div v-else classpoetry-content p classcontent{{ poetry.content }}/p p classsource—— {{ poetry.author }}《{{ poetry.origin }}》/p /div /div /template script setup import { ref, onMounted } from vue import { getRandomPoetry } from /api/poetry const poetry ref({ content: , origin: , author: }) const loading ref(true) const error ref(false) const fetchPoetry async () { loading.value true error.value false try { const res await getRandomPoetry() poetry.value { content: res.content || 无题, origin: res.origin || 佚名, author: res.author || 无名氏 } } catch (e) { error.value true } finally { loading.value false } } onMounted(fetchPoetry) /script style scoped .poetry-card { padding: 20px; background: #f9f7f1; border-radius: 8px; text-align: center; min-height: 120px; } .content { font-size: 1.2rem; color: #333; line-height: 1.8; } .source { margin-top: 12px; color: #999; font-style: italic; } .error button { padding: 6px 16px; border: 1px solid #ccc; border-radius: 4px; cursor: pointer; } /style3.5 在页面中使用src/App.vuetemplate div classapp h1今日·诗意/h1 PoetryDisplay / /div /template script setup import PoetryDisplay from ./components/PoetryDisplay.vue /script四、5个常见坑与排查方法下表整理了集成随机诗词API时最容易被忽视的问题每个都配有解决方案。坑点典型现象原因解决方案跨域报错Access-Control-Allow-Origin缺失浏览器同源策略开发环境用Vite proxy生产环境后端转发或要求服务商开CORS接口限流突然返回空或503API有每分钟/小时请求限制前端加本地缓存localStorage相同诗词不再重复请求或使用防抖字段名变化渲染为“undefined”接口升级或备用接口字段不同映射时设置默认值如 res.content网络延迟页面长时间空白无加载状态使用loading变量控制骨架屏或转圈同首循环两次刷新显示相同诗词接口伪随机短时间内重复客户端维护已显示列表结合数组去重后展示4.1 跨域终极方案Vite Proxy修改vite.config.jsexport default defineConfig({ server: { proxy: { /jinrishici: { target: https://v1.jinrishici.com, changeOrigin: true, rewrite: path path.replace(/^\/jinrishici/, ) } } } })然后请求改为/jinrishici/all.json。4.2 本地缓存避免重复请求const cache JSON.parse(localStorage.getItem(poetryCache) || []) // 获取新诗词时检查是否已经拉取过 const fetchUniquePoetry async () { let data do { data await getRandomPoetry() } while (cache.some(item item.content data.content)) cache.push(data) localStorage.setItem(poetryCache, JSON.stringify(cache.slice(-50))) // 保留最近50首 return data }五、最佳实践让诗词展示更优雅动画过渡使用Transition包裹内容切换时有淡入效果。随机刷新按钮加一个刷新图标触发fetchPoetry同时闪烁一下。多数据源fallback如果主接口挂了轮询备用接口例如ApiZero上的同类API。服务器端缓存SSR如果使用Nuxt可以在服务端预取一首诗词作为初始状态减少前端白屏时间。button clickrotatePoetry title换一首 随机 /button script setup const rotatePoetry async () { await fetchPoetry() // 触发CSS动画 animation.value true setTimeout(() animation.value false, 500) } /script六、总结本文从真实开发痛点出发带你走完了“选接口 → 调试 → 封装 → 组件化 → 避坑”的完整链路。核心公式是稳定API 合理的请求模块 完备的loading/error状态 兜底策略。如果你现在手头正有一个Vue项目不妨复制上面的PoetryDisplay.vue直接运行。遇到问题不要慌对照表格逐一排查。如果你在项目中遇到了类似接口调用报错比如其他古诗API、一言API等欢迎把错误信息贴在评论区我会按场景补充排查思路。收藏本文下次给网站加“诗意侧边栏”时就能直接用了。觉得有用的话点个赞再走呗

相关新闻

基于多源数据融合与GNN的代码安全漏洞实时检测系统设计与实践

基于多源数据融合与GNN的代码安全漏洞实时检测系统设计与实践

1. 项目概述:为什么我们需要“实时”的代码安全漏洞检测?在软件开发领域,代码安全漏洞就像是隐藏在建筑结构中的“应力裂纹”,平时不易察觉,一旦遭遇特定条件(如恶意输入、高并发压力)&#xff…

2026/7/7 4:58:06阅读更多 →
警惕 Codex 幻觉:AI 编程的边界实测与应对策略

警惕 Codex 幻觉:AI 编程的边界实测与应对策略

引言:当 AI 开始“自信地”犯错——直面AI编程幻觉与Codex幻觉 摘要:本文深入探讨了AI编程中的核心挑战——AI编程幻觉,特别是以Codex为代表的模型产生的Codex幻觉。我们将分析这些AI代码生成错误的根源,评估编程AI可靠性&#xf…

2026/7/7 4:58:06阅读更多 →
推荐徐州宠物医院服务口碑好

推荐徐州宠物医院服务口碑好

给徐州养宠的朋友找医院,我挖到一家还不错的——大家选宠物医院,最看重的不就是服务和口碑嘛,泉山区的象牙塔动物医院,凭着专业团队和全面的服务,现在已经成了不少养宠人的选择。这家医院是2024年刚成立的,…

2026/7/7 4:53:05阅读更多 →
Meetily:把 AI 会议助手 塞进你的电脑里Rust 构建的隐私优先本地会议转录+AI摘要工具 录音→转写→总结 | SSP Github Daily

Meetily:把 AI 会议助手 塞进你的电脑里Rust 构建的隐私优先本地会议转录+AI摘要工具 录音→转写→总结 | SSP Github Daily

**⚠️ 免责声明:**本工具依赖境外公开数据源(GitHub、HuggingFace 等),部分平台在中国大陆需合规网络环境。本文仅做技术分享,不构成投资建议或产品推荐。开源项目由社区维护,使用前请自行评估安全风险。 …

2026/7/7 6:03:13阅读更多 →
在线文档翻译器工具

在线文档翻译器工具

在线文档翻译器 https://www.onlinedoctranslator.com/zh-CN/translationform

2026/7/7 6:03:13阅读更多 →
决胜中层——中层经理管理能力全面提升

决胜中层——中层经理管理能力全面提升

技术中层成长困局:只盯业务交付,忽略自我迭代会锁死团队上限各位研发管理者,我们不妨一起复盘一个常见现象:项目排期、线上故障、需求对接占用全部工作时间,很少留出时间复盘管理问题、学习带队方法。不少技术负责人晋…

2026/7/7 6:03:13阅读更多 →
2026云服务器选购:5个维度找到高性价比方案

2026云服务器选购:5个维度找到高性价比方案

在云计算快速普及的2026年,云服务器已成为个人开发者与企业数字化转型的基础工具 。面对阿里云、腾讯云、华为云等头部厂商及众多新兴服务商,如何在价格与性能间找到平衡,买到高性价比的云服务器?以下从5个核心维度为你提供实用指…

2026/7/7 6:03:13阅读更多 →
3D异构集成与晶圆级封装:MEMS微型化背后的先进制造工艺革命

3D异构集成与晶圆级封装:MEMS微型化背后的先进制造工艺革命

正在迈入一个“万物智能”的时代。无论是穿梭于街头的自动驾驶汽车,还是与我们语音互动的智能音箱,亦或是时刻监测健康的智能手表,这些设备都拥有一个共同的核心基石——微机电系统(MEMS,Micro-Electro-Mechanical Sys…

2026/7/7 6:03:13阅读更多 →
WPA/WPA2无线网络安全实战:从监听模式到握手包捕获与密码破解

WPA/WPA2无线网络安全实战:从监听模式到握手包捕获与密码破解

1. 项目概述:从理论到实战的无线安全探索提到Kali Linux,很多对网络安全感兴趣的朋友第一反应可能就是“破解Wi-Fi密码”。这个印象既对也不对。说它对,是因为Kali集成了Aircrack-ng套件等强大的无线安全审计工具,使得针对WPA/WPA…

2026/7/7 5:58:13阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/7 4:43:43阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →