写点什么

前端模拟假数据(json-server 光速入门篇)

用户头像
学习委员
关注
发布于: 2021 年 01 月 28 日
前端模拟假数据(json-server光速入门篇)

一、工作存在的痛点

在采用前后端分离的开发方式后,前端可能需要先使用假数据模拟数据交互,然后再把数据格式发给后端。

告诉后端在生产环境时也要按照这种格式来返回数据给前端。


二、解决方案:json-server

json-server 是一个 Node 模块,运行 Express 服务器,在前端本地运行,可以存储 JSON 数据的 server。几行简单的 js 脚本就可以模拟出 RESTful API 的接口。


前端能在本地以操作 json 的方式实现数据增删改查,并在本地生成真实数据(模拟版)。


三、安装


1、安装 Node.js

这里只提供 Node官网 地址,请根据系统自行安装。


2、安装 json-server

json-server GitHub地址


因为经常会用到,所以建议全局安装。


npm install -g json-server
复制代码


四、在 Vue 中使用


本文用 Vue3 + axios 配合使用,Vue2 的用法和配置差不多,请自行转换语法。


1、定义数据


在使用 vue-cli 搭建好项目,并安装了 axios

之后需要在 vue 项目根目录下,创建一个文件夹用来存放数据(其实可以直接创建 json文件来存放数据,但使用文件夹的方式会更好的管理项目)。


db.json 里定义一组数据(也可以定义多组)


{  "users": [    {      "id": 1,      "name": "慕容雪瑶",      "age": 30    }  ]}
复制代码


这里模拟一个用户表,暂时只有 1 条数据。


2、运行


package.json 中配置


"scripts": {  "serve": "vue-cli-service serve",  "build": "vue-cli-service build",  "jsonserver": "json-server --watch db/db.json"}
复制代码


上面多配置了一条 jsonserver 命令,使用 json-server 命令启动这个服务,并通过 --watch 监听 db.json 文件文件的变化。


然后运行一下命令,启动 json-server 服务


npm run jsonserver
复制代码



可以看到成功启动了服务,http://localhost:3000,而 http://localhost:3000/users 就是专门访问刚刚定义的那个 “用户表” 的数据。


比如在浏览器访问(也可以使用 postman 访问)


3、查 get


使用 get 方法进行查询。

以下代码没做数据校验。


<template>  <div>    <div      v-for="user in userList"      :key="user.id"    >      <span>姓名:{{user.name}}</span> | <span>年龄: {{user.age}}</span>    </div>  </div></template>
<script>import { ref } from 'vue'import axios from 'axios'export default { setup() { const userList = ref([])
axios.get('http://localhost:3000/users') .then(res => { userList.value = res.data }) .catch(err => { console.error(err) })
return { userList } }}</script>
复制代码



4、增 post


使用 post 方法新增数据。


通过 axios 新增数据,新增完再调用获取数据的 api,更新视图。

以下代码没做数据校验。添加成功后也没清空输入框。


<template>  <div>    <div>      <input type="text" placeholder="请输入姓名" v-model="userName">      <input type="text" placeholder="请输入年龄" v-model="userAge">      <button @click="addUser">添加</button>    </div>    <div      v-for="user in userList"      :key="user.id"    >      <span>姓名:{{user.name}}</span> | <span>年龄: {{user.age}}</span>    </div>  </div></template>
<script>import { ref } from 'vue'import axios from 'axios'export default { setup() { const userList = ref([])
// 获取用户列表 const fetchUserList = function() { axios.get('http://localhost:3000/users') .then(res => { userList.value = res.data }) .catch(err => { console.error(err) }) }
fetchUserList()
const userName = ref('') // 用户名 const userAge = ref('') // 年龄
// 添加用户 function addUser() { axios.post('http://localhost:3000/users', { name: userName.value, age: userAge.value }) .then(res => { console.log(res) fetchUserList() // 添加成功后更新数据 }) .catch(err => { console.error(err) }) }
return { userList, userName, userAge, addUser } }}</script>
复制代码



5、改 put

使用 put 方法修改。

apihttp://localhost:3000/users/1,最后的 1 代表 id1

其实学过 vue-router 的开发者,也知道这个原理:http://localhost:3000/users/:id


function edit() {  axios.put('http://localhost:3000/users/1', {    name: userName.value,    age: userAge.value  })    .then(res => {      console.log(res)      fetchUserList() // 添加成功后更新数据    })    .catch(err => {      console.error(err)    })}
复制代码


6、删 delete

使用 delete 删除。

也是根据 id 进行删除。


function delUser() {  axios.delete('http://localhost:3000/users/1')    .then(res => {      console.log(res)      fetchUserList() // 添加成功后更新数据    })    .catch(err => {      console.error(err)    })}
复制代码


用户头像

学习委员

关注

反派 2019.03.19 加入

哈哈哈哈哈哈哈哈哈哈哈哈哈哈

评论

发布
暂无评论
前端模拟假数据(json-server光速入门篇)