搭建mock服务器(微信小程序)
如何在微信小程序使用mock.js实在是个问题,为了完全模拟访问路由和数据,选择在搭建本地mock服务器是一个不错的选择。
以下示例了一个mock服务器的搭建过程以及以学生为对象进行增删改查分页的示例。
前提要求
安装了node.js
创建服务器
- 我们在自己电脑上选择一个位置,创建一个新的文件夹mockServer,用vscode打开这个文件夹
- 使用命令安装以下模块
cnpm install express body-parser cors nodemon mockjs --save
- express node.js框架
- body-parser 用于解析url
- cors 用来解决跨域问题
- nodemon 解决代码改变需要自己手动重启服务器的问题,nodemon检测到代码改变会自己启动服务器
- mockjs mock模拟工具
- 建立文件和目录
(1)使用npm init -f
生成一个package.json
文件
修改为使用 nodemon 启动
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "start": "nodemon server.js"
- },
(2)创建server.js文件,mock目录
- 在
server.js
中写入以下代码用于测试,在控制条输入npm start
启动服务器
- const express = require('express');
- const bodyParser = require('body-parser');
- const cors = require('cors');
-
- const app = express();
- app.use(bodyParser.urlencoded({ extended: true }));
- app.use(bodyParser.json());
- app.use(cors());
-
- app.get('/posts', (req, res) => {
- res.send([
- {
- title: 'Hello World!',
- description: 'Hi there! How are you?'
- }
- ]);
- });
-
- // 指定端口
- const PORT = 8081;
-
- app.listen(PORT, () => {
- console.log(`服务器启动,运行为http://localhost:${PORT}`);
- });
控制台将会输出服务器启动,运行为http://localhost:8081
;我们在浏览器中访问http://localhost:8081/posts
,出现以下内容,那么说明服务器创建成功。
- [
- {
- "title": "Hello World!",
- "description": "Hi there! How are you?"
- }
- ]
创建mock接口
- 在mock文件夹下新建2个文件,一个
index.js
用于声明路由,一个student.js
,用来编写模拟学生对象相关操作代码。 - 在student.js编写相关操作代码
- // student.js
- const Mock = require('mockjs');
- let list = [];
- const count = 100;
-
- for (let i = 0; i < count; i++) {
- list.push(
- Mock.mock({
- id: '@increment',
- stuNo: 20220000 + parseInt(`${i + 1}`),
- stuName: '@cname',
- stuGender: '@integer(0,1)',
- stuPhone: /^1[0-9]{10}$/,
- stuBirthday: '@date("yyyy-MM-dd")',
- classNo: '@integer(201901,201912)'
- })
- );
- }
-
- // 增加学生
- exports.add = (req, res) => {
- const { classNo, stuBirthday, stuGender, stuName, stuPhone } = req.body;
- list.push({
- id: list[list.length - 1].id + 1,
- stuNo: list[list.length - 1].stuNo + 1,
- classNo: classNo,
- stuBirthday: stuBirthday,
- stuGender: stuGender,
- stuName: stuName,
- stuPhone: stuPhone
- });
- let msg = {
- code: 20000,
- data: {
- listNum: list.length,
- message: '添加成功!'
- }
- };
- res.status(200).json(msg);
- };
-
- // 删除学生
- exports.delete = (req, res) => {
- const id = req.params.id;
-
- // 判断id是否存在
- let flag = list.some(item => {
- if (item.id == id) {
- return true;
- }
- });
-
- if (flag) {
- // id 存在
- list = list.filter(item => item.id !== parseInt(id));
- const msg = {
- code: 20000,
- data: {
- listNum: list.length,
- message: '删除成功!'
- }
- };
- res.status(200).json(msg);
- } else {
- // id不存在
- const msg = {
- code: 40000,
- data: {
- msg: 'id不存在!'
- }
- };
- res.status(500).json(msg);
- }
- };
- // 更新学生信息
- exports.update = (req, res) => {
- const { id, classNo, stuBirthday, stuGender, stuName, stuPhone } = req.body;
-
- // 判断id是否存在
- let flag = list.some(item => {
- if (item.id == id) {
- return true;
- }
- });
-
- if (flag) {
- // id存在
- list.some(item => {
- if (item.id === id) {
- item.classNo = classNo;
- item.stuBirthday = stuBirthday;
- item.stuGender = stuGender;
- item.stuName = stuName;
- item.stuPhone = stuPhone;
- }
- });
- let msg = {
- code: 20000,
- data: {
- message: '更新成功!'
- }
- };
- res.status(200).json(msg);
- } else {
- // id不存在
- const msg = {
- code: 40000,
- data: {
- msg: 'id不存在!'
- }
- };
- res.status(500).json(msg);
- }
- };
- // 查询学生信息
- exports.find = (req, res) => {
- let { queryStr, page = 1, limit = 10 } = req.body;
- // 根据学生姓名查询学生或者返回所有学生信息
-
- const mockList = queryStr && queryStr.length > 0 ? list.filter(item => item.stuName.includes(queryStr)) : list;
- // 数据分页
- const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1));
- let msg = {
- code: 20000,
- count: mockList.length,
- data: pageList
- };
- res.status(200).json(msg);
- };
-
- // 根据id返回学生信息
- exports.findById = (req, res) => {
- const id = req.query.id;
- const pageList = list.filter(item => item.id == id);
- const msg = {
- code: 20000,
- data: pageList
- };
- res.status(200).json(msg);
- };
- 定义路由
- // index.js
- module.exports = function(app) {
- const student = require('./student');
-
- // 新增学生
- app.post('/student/add', student.add);
-
- // 删除学生
- app.delete('/student/delete/:id', student.delete);
-
- // 更新学生信息
- app.put('/student/update', student.update);
-
- // 查询学生信息
- app.post('/student/list', student.find);
-
- // 查询单个学生接口
- app.get('/student', student.findById);
- };
- 在
server.js
中引入index.js
文件,删除定义的posts接口
- const express = require('express');
- const bodyParser = require('body-parser');
- const cors = require('cors');
-
- const app = express();
- app.use(bodyParser.urlencoded({ extended: true }));
- app.use(bodyParser.json());
- app.use(cors());
-
- // 引入路由文件
- require('./mock/index')(app);
-
- // 指定端口
- const PORT = 8081;
-
- app.listen(PORT, () => {
- console.log(`服务器启动,运行为http://localhost:${PORT}`);
- });
测试接口
以下为在小程序中编写的测试代码
- <!--index.wxml-->
- <view class="container">
- <button catchtap='getStudent'>获取学生信息</button>
- <button catchtap='deleteStudent'>删除学生信息</button>
- <button catchtap='addStudent'>新增学生信息</button>
- <button catchtap='updateStudent'>更新学生信息</button>
- <button catchtap='findStudent'>查询单个学生</button>
- </view>
- //index.js
- //获取应用实例
- const app = getApp()
-
- Page({
- data: {},
- getStudent:function(){
- wx.request({
- url: 'http://localhost:8081/student/list',
- data:{
- queryStr:'',
- page:1,
- limit:10
- },
- method: 'POST',
- success: function (res) {
- console.log('访问成功:', res);
- },
- fail: function (e) {
- console.log('访问失败:', e);
- },
- complete: function () {
- console.log('访问完成');
- }
- })
- },
- deleteStudent:function(){
- wx.request({
- url: 'http://localhost:8081/student/delete/1',
- method: 'DELETE',
- success: function (res) {
- console.log('访问成功:', res);
- },
- fail: function (e) {
- console.log('访问失败:', e);
- },
- complete: function () {
- console.log('访问完成');
- }
- })
- },
- addStudent:function(){
- wx.request({
- url: 'http://localhost:8081/student/add',
- data:{
- classNo:'201901',
- stuBirthday:'2019-05-31',
- stuGender:0,
- stuName:'李小珍',
- stuPhone:'12345678910'
- },
- method: 'POST',
- success: function (res) {
- console.log('访问成功:', res);
- },
- fail: function (e) {
- console.log('访问失败:', e);
- },
- complete: function () {
- console.log('访问完成');
- }
- })
- },
- updateStudent:function(){
- wx.request({
- url: 'http://localhost:8081/student/update',
- data: {
- id:1,
- classNo: '201901',
- stuBirthday: '2019-05-31',
- stuGender: 0,
- stuName: '李小珍',
- stuPhone: '12345678910'
- },
- method: 'PUT',
- success: function (res) {
- console.log('访问成功:', res);
- },
- fail: function (e) {
- console.log('访问失败:', e);
- },
- complete: function () {
- console.log('访问完成');
- }
- })
- },
- findStudent:function(){
- wx.request({
- url: 'http://localhost:8081/student?id=2',
- data: {},
- method: 'GET',
- success: function (res) {
- console.log('访问成功:', res);
- },
- fail: function (e) {
- console.log('访问失败:', e);
- },
- complete: function () {
- console.log('访问完成');
- }
- })
- }
- })
返回的结果如下:
- 获取学生信息
- 删除学生信息
3.新增学生信息
- 更新学生信息
PS:因为前面id被删除了,所以这个时候更新会报错
- 根据id查询单个学生
2019/05/31 18:56