当前位置:   article > 正文

搭建mock服务器(微信小程序)

const pagelist = mocklist.filter((item,index)= in

搭建mock服务器(微信小程序)

如何在微信小程序使用mock.js实在是个问题,为了完全模拟访问路由和数据,选择在搭建本地mock服务器是一个不错的选择。

以下示例了一个mock服务器的搭建过程以及以学生为对象进行增删改查分页的示例。

前提要求

安装了node.js

创建服务器

  1. 我们在自己电脑上选择一个位置,创建一个新的文件夹mockServer,用vscode打开这个文件夹
  2. 使用命令安装以下模块
cnpm install express body-parser cors nodemon mockjs --save
  • express node.js框架
  • body-parser 用于解析url
  • cors 用来解决跨域问题
  • nodemon 解决代码改变需要自己手动重启服务器的问题,nodemon检测到代码改变会自己启动服务器
  • mockjs mock模拟工具
  1. 建立文件和目录

(1)使用npm init -f生成一个package.json文件

​ 修改为使用 nodemon 启动

  1. "scripts": {
  2. "test": "echo \"Error: no test specified\" && exit 1",
  3. "start": "nodemon server.js"
  4. },

(2)创建server.js文件,mock目录

mockServer目录

  1. server.js中写入以下代码用于测试,在控制条输入npm start启动服务器
  1. const express = require('express');
  2. const bodyParser = require('body-parser');
  3. const cors = require('cors');
  4. const app = express();
  5. app.use(bodyParser.urlencoded({ extended: true }));
  6. app.use(bodyParser.json());
  7. app.use(cors());
  8. app.get('/posts', (req, res) => {
  9. res.send([
  10. {
  11. title: 'Hello World!',
  12. description: 'Hi there! How are you?'
  13. }
  14. ]);
  15. });
  16. // 指定端口
  17. const PORT = 8081;
  18. app.listen(PORT, () => {
  19. console.log(`服务器启动,运行为http://localhost:${PORT}`);
  20. });

控制台将会输出服务器启动,运行为http://localhost:8081;我们在浏览器中访问http://localhost:8081/posts,出现以下内容,那么说明服务器创建成功。

  1. [
  2. {
  3. "title": "Hello World!",
  4. "description": "Hi there! How are you?"
  5. }
  6. ]

创建mock接口

  1. 在mock文件夹下新建2个文件,一个index.js用于声明路由,一个student.js,用来编写模拟学生对象相关操作代码。
  2. 在student.js编写相关操作代码
  1. // student.js
  2. const Mock = require('mockjs');
  3. let list = [];
  4. const count = 100;
  5. for (let i = 0; i < count; i++) {
  6. list.push(
  7. Mock.mock({
  8. id: '@increment',
  9. stuNo: 20220000 + parseInt(`${i + 1}`),
  10. stuName: '@cname',
  11. stuGender: '@integer(0,1)',
  12. stuPhone: /^1[0-9]{10}$/,
  13. stuBirthday: '@date("yyyy-MM-dd")',
  14. classNo: '@integer(201901,201912)'
  15. })
  16. );
  17. }
  18. // 增加学生
  19. exports.add = (req, res) => {
  20. const { classNo, stuBirthday, stuGender, stuName, stuPhone } = req.body;
  21. list.push({
  22. id: list[list.length - 1].id + 1,
  23. stuNo: list[list.length - 1].stuNo + 1,
  24. classNo: classNo,
  25. stuBirthday: stuBirthday,
  26. stuGender: stuGender,
  27. stuName: stuName,
  28. stuPhone: stuPhone
  29. });
  30. let msg = {
  31. code: 20000,
  32. data: {
  33. listNum: list.length,
  34. message: '添加成功!'
  35. }
  36. };
  37. res.status(200).json(msg);
  38. };
  39. // 删除学生
  40. exports.delete = (req, res) => {
  41. const id = req.params.id;
  42. // 判断id是否存在
  43. let flag = list.some(item => {
  44. if (item.id == id) {
  45. return true;
  46. }
  47. });
  48. if (flag) {
  49. // id 存在
  50. list = list.filter(item => item.id !== parseInt(id));
  51. const msg = {
  52. code: 20000,
  53. data: {
  54. listNum: list.length,
  55. message: '删除成功!'
  56. }
  57. };
  58. res.status(200).json(msg);
  59. } else {
  60. // id不存在
  61. const msg = {
  62. code: 40000,
  63. data: {
  64. msg: 'id不存在!'
  65. }
  66. };
  67. res.status(500).json(msg);
  68. }
  69. };
  70. // 更新学生信息
  71. exports.update = (req, res) => {
  72. const { id, classNo, stuBirthday, stuGender, stuName, stuPhone } = req.body;
  73. // 判断id是否存在
  74. let flag = list.some(item => {
  75. if (item.id == id) {
  76. return true;
  77. }
  78. });
  79. if (flag) {
  80. // id存在
  81. list.some(item => {
  82. if (item.id === id) {
  83. item.classNo = classNo;
  84. item.stuBirthday = stuBirthday;
  85. item.stuGender = stuGender;
  86. item.stuName = stuName;
  87. item.stuPhone = stuPhone;
  88. }
  89. });
  90. let msg = {
  91. code: 20000,
  92. data: {
  93. message: '更新成功!'
  94. }
  95. };
  96. res.status(200).json(msg);
  97. } else {
  98. // id不存在
  99. const msg = {
  100. code: 40000,
  101. data: {
  102. msg: 'id不存在!'
  103. }
  104. };
  105. res.status(500).json(msg);
  106. }
  107. };
  108. // 查询学生信息
  109. exports.find = (req, res) => {
  110. let { queryStr, page = 1, limit = 10 } = req.body;
  111. // 根据学生姓名查询学生或者返回所有学生信息
  112. const mockList = queryStr && queryStr.length > 0 ? list.filter(item => item.stuName.includes(queryStr)) : list;
  113. // 数据分页
  114. const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1));
  115. let msg = {
  116. code: 20000,
  117. count: mockList.length,
  118. data: pageList
  119. };
  120. res.status(200).json(msg);
  121. };
  122. // 根据id返回学生信息
  123. exports.findById = (req, res) => {
  124. const id = req.query.id;
  125. const pageList = list.filter(item => item.id == id);
  126. const msg = {
  127. code: 20000,
  128. data: pageList
  129. };
  130. res.status(200).json(msg);
  131. };
  1. 定义路由
  1. // index.js
  2. module.exports = function(app) {
  3. const student = require('./student');
  4. // 新增学生
  5. app.post('/student/add', student.add);
  6. // 删除学生
  7. app.delete('/student/delete/:id', student.delete);
  8. // 更新学生信息
  9. app.put('/student/update', student.update);
  10. // 查询学生信息
  11. app.post('/student/list', student.find);
  12. // 查询单个学生接口
  13. app.get('/student', student.findById);
  14. };
  1. server.js中引入index.js文件,删除定义的posts接口
  1. const express = require('express');
  2. const bodyParser = require('body-parser');
  3. const cors = require('cors');
  4. const app = express();
  5. app.use(bodyParser.urlencoded({ extended: true }));
  6. app.use(bodyParser.json());
  7. app.use(cors());
  8. // 引入路由文件
  9. require('./mock/index')(app);
  10. // 指定端口
  11. const PORT = 8081;
  12. app.listen(PORT, () => {
  13. console.log(`服务器启动,运行为http://localhost:${PORT}`);
  14. });

测试接口

以下为在小程序中编写的测试代码

  1. <!--index.wxml-->
  2. <view class="container">
  3. <button catchtap='getStudent'>获取学生信息</button>
  4. <button catchtap='deleteStudent'>删除学生信息</button>
  5. <button catchtap='addStudent'>新增学生信息</button>
  6. <button catchtap='updateStudent'>更新学生信息</button>
  7. <button catchtap='findStudent'>查询单个学生</button>
  8. </view>
  9. //index.js
  10. //获取应用实例
  11. const app = getApp()
  12. Page({
  13. data: {},
  14. getStudent:function(){
  15. wx.request({
  16. url: 'http://localhost:8081/student/list',
  17. data:{
  18. queryStr:'',
  19. page:1,
  20. limit:10
  21. },
  22. method: 'POST',
  23. success: function (res) {
  24. console.log('访问成功:', res);
  25. },
  26. fail: function (e) {
  27. console.log('访问失败:', e);
  28. },
  29. complete: function () {
  30. console.log('访问完成');
  31. }
  32. })
  33. },
  34. deleteStudent:function(){
  35. wx.request({
  36. url: 'http://localhost:8081/student/delete/1',
  37. method: 'DELETE',
  38. success: function (res) {
  39. console.log('访问成功:', res);
  40. },
  41. fail: function (e) {
  42. console.log('访问失败:', e);
  43. },
  44. complete: function () {
  45. console.log('访问完成');
  46. }
  47. })
  48. },
  49. addStudent:function(){
  50. wx.request({
  51. url: 'http://localhost:8081/student/add',
  52. data:{
  53. classNo:'201901',
  54. stuBirthday:'2019-05-31',
  55. stuGender:0,
  56. stuName:'李小珍',
  57. stuPhone:'12345678910'
  58. },
  59. method: 'POST',
  60. success: function (res) {
  61. console.log('访问成功:', res);
  62. },
  63. fail: function (e) {
  64. console.log('访问失败:', e);
  65. },
  66. complete: function () {
  67. console.log('访问完成');
  68. }
  69. })
  70. },
  71. updateStudent:function(){
  72. wx.request({
  73. url: 'http://localhost:8081/student/update',
  74. data: {
  75. id:1,
  76. classNo: '201901',
  77. stuBirthday: '2019-05-31',
  78. stuGender: 0,
  79. stuName: '李小珍',
  80. stuPhone: '12345678910'
  81. },
  82. method: 'PUT',
  83. success: function (res) {
  84. console.log('访问成功:', res);
  85. },
  86. fail: function (e) {
  87. console.log('访问失败:', e);
  88. },
  89. complete: function () {
  90. console.log('访问完成');
  91. }
  92. })
  93. },
  94. findStudent:function(){
  95. wx.request({
  96. url: 'http://localhost:8081/student?id=2',
  97. data: {},
  98. method: 'GET',
  99. success: function (res) {
  100. console.log('访问成功:', res);
  101. },
  102. fail: function (e) {
  103. console.log('访问失败:', e);
  104. },
  105. complete: function () {
  106. console.log('访问完成');
  107. }
  108. })
  109. }
  110. })

返回的结果如下:

  1. 获取学生信息

获取学生信息

  1. 删除学生信息

删除学生信息

3.新增学生信息

新增学生信息

  1. 更新学生信息

更新学生信息

PS:因为前面id被删除了,所以这个时候更新会报错

  1. 根据id查询单个学生

根据id查询单个学生

2019/05/31 18:56

转载于:https://www.cnblogs.com/yejingping/p/10956983.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/111587
推荐阅读
  

闽ICP备14008679号