Vue用json-server+mockjs来Mock数据

本文介绍如何利用json-server和mockjs搭建本地模拟服务器,包括所需插件的安装步骤、模拟数据文件的编写及配置过程,并提供运行项目的方法。

环境配置

这里需要用到json-server和mockjs模拟插件。

json-server: https://github.com/typicode/json-server
mockjs: http://mockjs.com/

安装

npm install json-server –save-dev
npm install mockjs –save-dev

mock目录结构

这里写图片描述

db.js文件

// mock框架,这里demo暂时没用到
var Mock = require('mockjs');

var apiUser = require('./modules/user.js');
var apiGoods = require('./modules/goods.js');

module.exports = {
    login: apiUser.login,
    goodsList: apiGoods.goodsList
}

routes.js文件

const routes = {
    "/user/login": "/login",
    "/goods/list": "/goodsList"
}

module.exports = routes;

server.js文件

const jsonServer = require('json-server');
const db = require('./db.js');
const routes = require('./routes.js');

const port = 3000;

const server = jsonServer.create()
const router = jsonServer.router(db)
const middlewares = jsonServer.defaults()
const rewriter = jsonServer.rewriter(routes)

server.use(middlewares)

// 将 POST 请求转为 GET
server.use((request, res, next) => {
    request.method = 'GET';
    next();
});

server.use(rewriter)  // 注意:rewriter 的设置一定要在 router 设置之前
server.use(router)

server.listen(port, () => {
    console.log(`open mock server at http://localhost:${port}`);
})

user.js文件


function login(config) {
    // 模拟数据
    let result = {
        code: 200,
        data: null,
        msg: '获取成功',
        time: new Date()
    }

    result.data = { userName: "hello", mobile: "13888888888" };
    return result;
}

module.exports = {
    login: login()
}

goods.js文件


function goodsList(config) {
    // 模拟数据
    let result = {
        "status": "0",
        "result": [
            {
                "productId": "10001",
                "productName": "小米6",
                "prodcutPrice": "2499",
                "prodcutImg": "mi6.jpg"
            },
            {
                "productId": "10002",
                "productName": "小米笔记本",
                "prodcutPrice": "3999",
                "prodcutImg": "minote.jpg"
            }
        ]
    };
    return result;
}

module.exports = {
    goodsList: goodsList()
}

配置请求代理

在/config/index.js中添加如下

module.exports = {
  dev: {
    proxyTable: {
      '/mock': {
        target: 'http://localhost:3000',   // 需要请求的地址
        changeOrigin: true,  // 是否跨域
        pathRewrite: {
          '^/mock': '/'  // 替换target中的请求地址,例如请求的时候把'/login'换成'/mock/login'
      }
    },
    }
}

配置package.json

这里由于涉及到一个终端开启两个端口的服务,所以需要用到concurrently,先安装concurrently。

npm install concurrently –save-dev

在package.json中添加如下脚本

  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js",
    "mock-server": "node ./src/mock/server.js",
    "mock-dev": "concurrently \"npm run dev\" \"npm run mock-server\""
  },

运行项目

npm run mock-dev

运行成功后就可以请求模拟数据了。

接口请求地址

http://localhost:3000/login
http://localhost:3000/goodsList

请求示例

<script>
import axios from "axios";

export default {
  data() {
    return {};
  },
  mounted() {
    this.getMockData();
  },
  methods: {
    getMockData() {
      axios.get("/mock/goodsList").then(resp => {
        console.log(resp.data);
      });
    },
  }
};
</script>

总结

本人也是第一次使用json-server和mockjs来模拟数据,有问题再记录。

<think>我们正在讨论如何在开发中使用json-servermockjs进行数据模拟。根据用户问题,我们需要结合两个工具:json-server(一个用于创建模拟RESTAPI的简单工具)和mockjs(一个用于生成随机数据的库)。步骤大致如下:1.安装json-servermockjs。2.使用mockjs生成模拟数据,并按照json-server要求的格式导出。3.启动json-server使用生成的模拟数据文件。注意:json-server要求数据文件是一个JSON对象,其中每个键对应一个资源(即一个数组,数组中的每个对象代表一个资源项,并且每个对象至少要有id属性)。而mockjs可以帮助我们生成随机数据,我们可以用它来生成符合要求的数组。参考引用[1]:它提到在js文件中定义模拟数据,并且这个js文件必须导出一个包含实体列表的对象。每个实体至少有一个id键。因此,我们可以创建一个js文件(比如db.js),在这个文件中使用mockjs生成数据,然后导出给json-server使用。具体步骤:步骤1:安装必要的包在项目中安装json-servermockjs(以及可能需要的其他包,如axios等,但这里我们主要关注模拟数据)。步骤2:创建模拟数据文件(db.js)在这个文件中,我们使用mockjs生成数据。注意,我们需要导出一个对象,每个属性值是一个数组(代表一个资源集合)。步骤3:启动json-server,指定使用db.js作为数据源。下面我们详细说明每一步。步骤1:安装```bashnpminstall-gjson-servernpminstallmockjs--save-dev```步骤2:创建db.js例如,我们模拟一个用户列表(users)和一个文章列表(posts)。示例db.js内容:```javascript//引入mockjsconstMock=require(&#39;mockjs&#39;);//使用mockjs生成数据constdata={users:Mock.mock({&#39;list|10&#39;:[//生成10个用户{&#39;id|+1&#39;:1,//id从1开始递增name:&#39;@cname&#39;,//随机中文名age:&#39;@integer(20,60)&#39;,//20到60之间的整数email:&#39;@email&#39;}]}).list,//注意:我们取生成的list数组posts:Mock.mock({&#39;list|20&#39;:[{&#39;id|+1&#39;:1,title:&#39;@ctitle(5,10)&#39;,content:&#39;@cparagraph(2)&#39;,userId:&#39;@integer(1,10)&#39;//关联用户id}]}).list};//导出数据对象,注意json-server要求每个键对应一个数组module.exports=data;```步骤3:启动json-server在命令行中运行:```bashjson-server--watchdb.js--port3004```这样,json-server会启动在3004端口,并且根据db.js生成的数据提供RESTAPI。例如,我们可以访问:GET/users获取所有用户GET/users/1获取id为1的用户另外,json-server还支持其他REST操作(POST,PUT,DELETE等),并且会保存修改(在内存中,重启会重置)。注意:由于db.js中使用的是mockjs动态生成数据,每次重启服务数据都会重新生成(即数据会变)。如果希望数据持久化不变,可以将生成的数据保存到一个json文件中,然后让json-server监视这个json文件。例如,我们可以写一个脚本来生成一次数据并写入db.json:创建generate-mock-data.js:```javascriptconstfs=require(&#39;fs&#39;);constMock=require(&#39;mockjs&#39;);constdata={users:Mock.mock({&#39;list|10&#39;:[...]}).list,posts:Mock.mock({&#39;list|20&#39;:[...]}).list};fs.writeFileSync(&#39;db.json&#39;,JSON.stringify(data,null,2));```然后在package.json中添加一个脚本:```json"scripts":{"generate-mock":"nodegenerate-mock-data.js","mock-server":"json-server--watchdb.json--port3004"}```这样,先运行`npmrungenerate-mock`生成db.json,然后运行`npmrunmock-server`启动服务。以上就是在开发中使用json-servermockjs进行数据模拟的方法。相关问题:1.如何为json-server添加自定义路由?2.如何模拟请求延迟和错误响应?3.如何结合前端框架(如React/Vue使用json-server进行开发?</think>### 如何在开发中结合使用 JSON-ServerMockJS 进行数据模拟 以下是完整的实现步骤: #### 1. **安装依赖** ```bash npm install json-server mockjs --save-dev ``` #### 2. **创建 Mock 数据文件 (`db.js`)** ```javascript // db.js const Mock = require(&#39;mockjs&#39;); // 使用 MockJS 生成模拟数据 module.exports = { users: Mock.mock({ &#39;list|20&#39;: [{ &#39;id|+1&#39;: 1, name: &#39;@cname&#39;, email: &#39;@email&#39;, role: /admin|user/, createdAt: &#39;@datetime&#39; }] }).list, products: Mock.mock({ &#39;list|50&#39;: [{ &#39;id|+1&#39;: 1, name: &#39;@ctitle(6,12)&#39;, price: &#39;@natural(10,1000)&#39;, stock: &#39;@natural(0,500)&#39; }] }).list }; ``` **说明**: - 符合 JSON-Server 要求的实体格式(每个对象必须有 `id`)[^1] - 使用 MockJS 的随机数据模板(`@cname`, `@email`, `@datetime` 等) #### 3. **启动 JSON-Server** ```bash json-server --watch db.js --port 3004 ``` **关键参数**: - `--watch db.js`:监视 JS 文件动态生成数据 - `--port 3004`:指定服务端口 #### 4. **验证接口** 访问自动生成的 RESTful 接口: ``` GET /users # 获取所有用户 GET /users/1 # 获取 ID=1 的用户 POST /products # 创建新产品 ``` #### 5. **前端调用示例 (Axios)** ```javascript import axios from &#39;axios&#39;; // 获取用户数据 const fetchUsers = async () => { const res = await axios.get(&#39;http://localhost:3004/users&#39;); console.log(res.data); // 输出 MockJS 生成的随机数据 }; // 创建新产品 const createProduct = async () => { await axios.post(&#39;http://localhost:3004/products&#39;, { name: &#39;New Product&#39;, price: 99 }); }; ``` #### 6. **高级配置(可选)** 在 `json-server.json` 中添加自定义配置: ```json { "routes": "routes.json", "delay": 1000, // 模拟网络延迟 "readOnly": false // 允许写入操作 } ``` #### 7. **自定义路由 (`routes.json`)** ```json { "/api/users": "/users", "/api/products/:id": "/products/:id" } ``` --- ### **工作流程优势** 1. **动态数据**:每次重启服务生成新数据 2. **零编码 API**:自动获得完整 RESTful 接口 3. **真实数据模式**:MockJS 提供符合业务逻辑的随机数据 4. **前端解耦**:不依赖后端 API 完成开发 --- ### 相关问题 1. 如何在 JSON-Server模拟 HTTP 错误响应(如 404/500)? 2. MockJS 支持哪些类型的随机数据生成规则? 3. 如何持久化 JSON-Server数据的修改? 4. 怎样在 React/Vue 项目中集成 JSON-ServerMock 数据? [^1]: Next is defining your mock data in a js file. I’ll define my mock data in a db.js file. json-graphql-server says that the mock data from our js file must export an object with a list of entities. These entities should at least have an id key.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果冻豆人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值