CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 框架与 ORM/课时/fetch 与 HTTP 客户端
RawBlame
课时目录12 节

Node.js 框架与 ORM

  1. 01Node 框架生态
  2. 02Fastify
  3. 03Hono
  4. 04fetch 与 HTTP 客户端
  5. 05Drizzle ORM
  6. 06Knex 查询构建
  7. 07Sequelize
  8. 08模板引擎
  9. 09Vitest 测试
  10. 10日志
  11. 11生产运行
  12. 12综合练习

fetch 与 HTTP 客户端

fetch、axios、got、ky。

25 分钟

fetch 与 HTTP 客户端

Node 18+ 内置 全局 fetch,BFF 与脚本里调外部 API 不必再强绑 axios。不同客户端在 拦截器、超时、流式下载、TypeScript 体验 上各有取舍。

学习目标

  • 用原生 fetch 完成 GET/POST 与错误处理
  • 对比 axios、got、ky 的典型用法
  • 在 Fastify/Hono handler 中安全调用第三方 API

原生 fetch

const res = await fetch("https://api.example.com/tracks", {
  headers: { Accept: "application/json" },
  signal: AbortSignal.timeout(5000),
});

if (!res.ok) {
  throw new Error(`HTTP ${res.status}: ${await res.text()}`);
}

const data = await res.json();

注意:fetch 仅在 !res.ok 时 不会 自动抛错,需显式判断。

库对比(选型)

库优势注意
fetch(内置)零依赖、标准 API拦截器需自封装
axios拦截器、广泛示例体积较大;浏览器/Node 通用
gotNode 专用、重试/分页偏 Node 脚本与服务端
ky轻量、基于 fetch主要 ESM;适合现代小服务

在 nodejs-essentials 的 HTTP 课基础上,框架课重点放在 服务内 outbound 调用:调支付网关、CMS、Java 主 API(:8080)等。

实践建议

// 封装:基址 + 超时 + JSON
async function apiGet(path) {
  const res = await fetch(`${process.env.API_BASE}${path}`, {
    signal: AbortSignal.timeout(8000),
  });
  if (!res.ok) throw new Error(`upstream ${res.status}`);
  return res.json();
}
  • 密钥走 process.env,见 node-env
  • 出站失败要有 降级或明确 502,别吞错
  • 高并发出站配合 nodejs-advanced-essentials 的连接与超时策略

练习

  • 用 fetch 调一个公开 JSON API 并打印字段
  • 用 axios 实现同一调用,对比错误对象结构
  • 在 Fastify 路由里代理 GET /api/tracks 到 mock 上游

小结

内置 fetch 够用;axios/got/ky 补拦截与 Node 特性。 下一课 Drizzle:类型安全的 SQL 层。

加载本节练习…
← 上一课Hono下一课 →Drizzle ORM