当前位置: 首页 > news >正文

json-server的用法-基于 RESTful API 的本地 mock 服务

json-server 是一个非常方便的工具,用于快速搭建基于 RESTful API 的本地 mock 服务,特别适合前端开发阶段模拟后端数据接口。


🧩 一、安装

npm install -g json-server

🚀 二、快速启动

  1. 创建一个 db.json 文件(模拟数据库):
{"posts": [{ "id": 1, "title": "Hello", "author": "Tom" },{ "id": 2, "title": "Hi", "author": "Jerry" }],"comments": [{ "id": 1, "body": "Nice post!", "postId": 1 }],"profile": { "name": "User" }
}
  1. 启动服务:
json-server --watch db.json

默认运行在:
📍 http://localhost:3000


🔧 三、支持的 RESTful API 操作

假设资源名为 posts

操作请求方式路径描述
获取列表GET/posts获取所有 posts
获取单个GET/posts/1获取 id 为 1 的 post
创建数据POST/posts添加新 post(需传 JSON)
更新(整体)PUT/posts/1替换整个 post 对象
更新(部分)PATCH/posts/1修改 post 的部分字段
删除DELETE/posts/1删除 post

🎛️ 四、常用功能说明

1. 分页、筛选、排序

  • 分页:?_page=2&_limit=10
  • 排序:?_sort=title&_order=desc
  • 筛选:?author=Tom

例如:

GET /posts?_page=1&_limit=5&_sort=title&_order=asc&author=Tom

2. 模糊查询

GET /posts?q=hello

模糊匹配所有字段包含 “hello” 的数据。

3. 关联查询(联表)

支持嵌套数据查询,例如:

GET /comments?postId=1
GET /posts/1?_embed=comments
  • _embed=comments:获取 post 时嵌入其 comments
  • _expand=post:获取 comment 时展开其对应 post

⚙️ 五、自定义路由(可选)

新建 routes.json

{"/api/*": "/$1"
}

然后运行:

json-server --watch db.json --routes routes.json

效果:
访问 /api/posts 实际映射到 /posts


🛡️ 六、中间件与端口指定(高级用法)

json-server --watch db.json --port 4000 --middlewares ./middleware.js

也可以使用 node 脚本自定义服务:

// server.js
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()server.use(middlewares)
server.use(router)
server.listen(4000, () => {console.log('JSON Server is running')
})

运行:

node server.js

🧪 七、开发中典型用途

  • 前端开发模拟 API,无需后端配合
  • Mock 数据开发接口文档
  • 演示项目/原型展示

✅ 八、总结亮点

特点描述
零配置启动基于一个 JSON 文件即可构建完整 RESTful API
完全 RESTfulGET/POST/PUT/PATCH/DELETE 全支持
支持分页筛选排序非常适合模拟真实后端接口
可扩展支持中间件、自定义路由等高级功能

http://www.dtcms.com/a/189569.html

相关文章:

  • 仿射变换 与 透视变换
  • 第二个五年计划!
  • 计算机网络:手机和基站之间是通过什么传递信息的?怎么保证的防衰减,抗干扰和私密安全的?
  • Java内存马的检测与发现
  • 基于 GPUGEEK平台进行vLLM环境部署DeepSeek-R1-70B
  • 一分钟在Cherry Studio和VSCode集成火山引擎veimagex-mcp
  • 容器安全-核心概述
  • 【论文阅读】UNIT: Backdoor Mitigation via Automated Neural Distribution Tightening
  • 内存安全设计方案
  • Python 常用模块(八):logging模块
  • 游戏引擎学习第279天:将实体存储移入世界区块
  • 时源芯微| KY键盘接口静电浪涌防护方案
  • 精益数据分析(59/126):移情阶段的深度博弈——如何避开客户访谈的认知陷阱
  • 力扣3337. 字符串转换后的长度 II随笔
  • 【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战
  • 在 Rocky Linux 上手动安装 zsh
  • 嵌入式(c语言篇)Day9
  • STM32 片上资源之串口
  • 牛市买卖数字货币逻辑
  • 【​​HTTPS基础概念与原理​】TLS握手过程详解​​
  • 【0415】Postgres内核 释放指定 memory context 中所有内存 ④
  • Kubernetes控制平面组件:Kubelet详解(四):gRPC 与 CRI gRPC实现
  • Android清单文件
  • Nexus首次亮相迪拜 TOKEN2049:以“手机 + 钱包 + 公链 + RWA”生态系统引领未来区块链基建
  • 2025年中国DevOps工具选型指南:主流平台能力横向对比
  • Idea 设置编码UTF-8 Idea中 .properties 配置文件中文乱码
  • Java中的异常机制
  • 时序数据库IoTDB分布式系统监控基础概述
  • 2025年中国主流DevOps平台对比分析:Gitee、阿里云效与GitLab CE的技术适配与合规实践全景解读
  • vue-ganttastic甘特图label标签横向滚动固定方法