🚀 前端开发福音:用 json-server 快速搭建本地 Mock 数据服务

假如你是一名前端开发者,曾为了"等后端接口"而发愁,那么你一定会爱上这个工具------json-server

🧠 为什么要用 json-server?

在开发中,接口数据未准备好是家常便饭。前端同学常常陷入以下困境:

  • 后端接口还没写好,我就不能调试页面了?
  • 想调试一个边界条件,却苦等后端造数据?
  • 接口文档与实际返回格式不一致,怎么办?

json-server 的出现就是为了解决这些痛点!

你只需要一个 JSON 文件,就能在几秒钟内启动一个完整的 REST API 服务,让前端不再"接口等于被动"。

🔧 一、快速开始

1. 安装

在你的前端项目中,使用 npm 或 yarn 安装:

bash 复制代码
npm install -g json-server
# 或者项目局部安装
npm install json-server --save-dev

2. 创建数据文件

创建一个 db.json 文件,作为模拟数据库。示例内容如下:

json 复制代码
{
  "users": [
    { "id": 1, "name": "小明", "age": 18, "hobby": "唱歌" },
    { "id": 2, "name": "小红", "age": 20, "hobby":"跳舞" }
  ],
  "articles": [
    { "id": 1, "title": "前端工程化", "author": "小明" },
    { "id": 2, "title": "Vue3实战", "author": "小红" }
  ]
}

3. 启动服务

package.json文件配置scripts执行脚本

json 复制代码
  "scripts": {
    "mock:server": "json-server --watch db.json"
  },

运行以下命令:

bash 复制代码
npm run mock:server

默认会监听 http://localhost:3000,你将获得一个完整的 REST API 服务。

📚 二、支持的 RESTful 接口

你可以直接使用以下方式访问数据:

  • 获取所有用户:GET /users
  • 获取指定用户:GET /users/1
  • 添加用户:POST /users
  • 修改用户:PUT /users/1
  • 删除用户:DELETE /users/1

是不是很像真实接口?是的,因为它本来就是模拟真实 REST 接口的。

🧪 三、进阶用法

1. 自定义端口和根路径

你可以通过参数修改默认行为:

bash 复制代码
"scripts": {
   "mock:server": "json-server --watch db.json --port 4000 --routes routes.json"
}

2. 配置 routes.json 自定义路由

如果你想将 /users 映射为 /api/user-list,可以创建 routes.json

json 复制代码
// routes.json
{
  "/api/user-list":"/users",
  "/api/get-user-info/:id": "/users/:id",
  "/api/add-user": "/users",
  "/api/update-user-info/:id":"/users/:id",
  "/api/delete-user/:id":"/users/:id",
  "/api/article-list":"/articles"
}

然后用命令启动:

bash 复制代码
npm run mock:server

访问 http://localhost:4000/api/user-list/users 即可返回用户列表。

3. 使用中间件

可以使用自定义中间件来扩展json-server的功能。例如,添加日志记录中间件:

js 复制代码
// middlewares.js
module.exports = (req,res,next)=> {
  console.log(req,'req')
  console.log(res,'res')
  console.log('这是第一个中间件')
  next();
}

启动服务时指定中间件:

json 复制代码
// package.json
{
"scripts": {
   "mock:server": "json-server --watch db.json --middlewares ./middlewares.js"
}

4. 自定义配置文件

json-server允许我们把所有的配置放到一个配置文件中,默认为json-server.json。配置文件的主要内容如下:

json 复制代码
// json-server.json
{
  // 自定义服务监听端口
  "port": 4000,  
  // 服务监听
  "watch": true, 
  "host": "127.0.0.1",// 指定域
  // 静态文件目录,可以将项目的HTML,JS,IMG等资源放在这里
  "static": "./public", 
   // 是否只允许get请求
  "read-only": false,
   // 是否允许跨域访问
  "no-cors":false,
   // 是否可压缩
  "no-gzip": false, 
   // 自定义路由,这个配置可以暂时省略,后续会有所涉及
  "routes": "routes.json"
}

配置运行脚本

json 复制代码
// package.json
{
  "scripts": {
    "mock:server": "json-server -w db.json"
  }
}

可以通过--config或简写-c,指定配置文件名称

json 复制代码
// package.json
{
  "scripts": {
    "mock:server": "json-server -w db.json --config ./json-server-config.json"
  }
}

5.其他相关配置参数

参数 简写 默认值 说明
--watch -w false 监听文件变动自动重启服务,常用于开发时实时响应数据更新
--port -p 3000 设置服务运行端口
--host -H localhost 设置服务器绑定的主机名
--routes -r 指定 routes.json 文件路径,用于配置自定义路由映射
--middlewares 指定中间件文件路径(支持一个或多个 .js 文件)
--static -s 设置静态文件目录(如配合前端页面开发)
--read-only false 启用只读模式,禁止对数据进行 POST/PUT/PATCH/DELETE 操作
--no-cors false 禁用跨域请求头(CORS)
--no-gzip false 禁用 Gzip 压缩
--delay 0 模拟网络延迟(单位为毫秒)
--id id 设置资源主键字段(默认是 id
--foreignKeySuffix Id 设置外键字段后缀(例如 postIduserId
--quiet -q false 启用静默模式,控制台不输出请求日志
--help -h - 查看帮助信息
--version -v - 查看版本信息

🧱 四、通过接口获取数据

1.获取users列表数据

  • http://localhost:4000/api/user-list
js 复制代码
const { data } = axios.get('http://localhost:4000/api/user-list');
// 返回
[
    {
        "id": 1,
        "name": "小明",
        "age": 18,
        "hobby": "唱歌"
    },
    {
        "id": 2,
        "name": "小红",
        "age": 20,
        "hobby": "跳舞"
    }
]

2.根据id获取用户数据

  • http://localhost:4000/api/get-user-info/1
js 复制代码
const { data } = axios.get(`http://localhost:4000/api/get-user-info/1`);
// 返回
{
    "id": 1,
    "name": "小明",
    "age": 18,
    "hobby": "唱歌"
}

3.添加用户数据

  • http://localhost:4000/api/add-user
js 复制代码
const form =  {
  name: "小刘",
  age: 16,
  hobby: "羽毛球"
}
const { data } = axios.post(`http://localhost:4000/api/add-user`,form);
   // 返回新增成功的数据
{
  "id": 3
  "name": "小刘",
  "age": 16,
  "hobby": "羽毛球",
}

4.修改用户数据

  • http://localhost:4000/api/update-user-info/3
js 复制代码
const form = {
    id:3,
    name:'小刘',
    age:18,
    hobby: '踢足球'
}
const { data } = axios.put(`http://localhost:4000/api/update-user-info/3`,form);
// 返回修改成功后的数据
{
    "id": 3,
    "name": "小刘",
    "age": 18,
    "hobby": "踢足球"
}

5.根据用户id删除用户数据

  • http://localhost:4000/api/delete-user/3
js 复制代码
// 删除id为3的用户数据
const { data } = axios.delete(`http://localhost:4000/api/delete-user/3`);

⚠️ 五、常见问题

Q1:为什么 POST 后的数据没有 id?

json-server 会自动为你添加自增 id,除非你手动指定。

Q2:能否写一些默认响应字段?

可以在 POST 时发送完整对象,也可以配合前端自动补字段。

Q3:如何模拟嵌套关系(如用户下的文章)?

你可以在 db.json 中设计嵌套结构,或者用 _expand_embed 功能:

js 复制代码
GET /articles?_expand=user
js 复制代码
GET /users?_embed=articles

🎁 六、推荐使用场景

  • 🎯 前后端分离开发阶段
  • 📱 移动端接口调试
  • 🧪 测试场景的数据造假
  • 🎨 UI 组件对数据有依赖时的联调阶段

🧩 附加资源

相关推荐
前端大卫2 小时前
Vue3 + Element-Plus 自定义虚拟表格滚动实现方案【附源码】
前端
却尘2 小时前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js
ccnocare2 小时前
浅浅看一下设计模式
前端
Lee川2 小时前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试
Ticnix3 小时前
ECharts初始化、销毁、resize 适配组件封装(含完整封装代码)
前端·echarts
纯爱掌门人3 小时前
终焉轮回里,藏着 AI 与人类的答案
前端·人工智能·aigc
twl3 小时前
OpenClaw 深度技术解析
前端
崔庆才丨静觅3 小时前
比官方便宜一半以上!Grok API 申请及使用
前端
星光不问赶路人3 小时前
vue3使用jsx语法详解
前端·vue.js
天蓝色的鱼鱼3 小时前
shadcn/ui,给你一个真正可控的UI组件库
前端