小程序下拉+Mock数据+node.js

下面介绍下小程序下拉的效果,规则:

  1. 刚进入页面时显示八项数据,当页面底部上拉时数据增加,数据加载完显示no more
  2. 当在顶部下拉时,页面重新加载,恢复只有8项数据
  3. 用mock做后台数据
  4. 用node.js造后台

介绍Mock造数据(具体参考MOCK文档,此操作是在vscode中操作的)

  • Mock作用:生成随机数据,拦截 Ajax 请求。我们本章主要是生成随机数据
  • 需要引入mock文件,可以去BootsCDN网站复制链接
  • 我们需要的数据用Mock.Random 生成,Mock.Random 是一个工具类,用于生成各种随机数据,Mock.Random 的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参数]) 。
<script src="https://cdn.bootcss.com/Mock.js/1.0.1-beta3/mock.js"></script>
<script>
    let arr = Mock.mock({
        'list|10':[{
            'name':'@cWord(2,3)',//随机中文名,2-3个字符
            'englishName':'@word(2,5)',//随机英文名,2-5个字符
            'date':'@date("yyyy-MM-dd")',//随机输出日期,格式为yyyy-MM-dd
            'image':'@image("100×100")',//随机生成大小为100*100的图片,也可指定背景颜色等
            'address':'@address(true)'//如果显示的是true,则加上所属的省
        }]
    })
    console.log(arr)
</script>

结果如下

image

强烈建议大家看下Mock的官方文档,了解下都有哪些功能,留下印象

node.js造后台(Mock造数据)

  • 需下载node.js软件,安装好win+R=》cmd输入node -v查看当前版本,查看是否安装成功
  • 输入node可以进入node环境,如下
image
  • 我们在vscode中创建一个node项目,新建node.js文件,下面开始配置环境

    1. 打开终端,输入npm init -y,生成默认的package.
    2. 输入npm i express --save 安装express包
    3. 输入npm install mockjs 安装mockjs包
    4. 输入npm i -g nodemon安装监听node代码变化的工具,输入nodemon开启
    5. 上面的安装了一次后面新建项目就不用再安装了,但是每次打开需输入nodemon
    6. 输入node node.js(文件名),在node环境下运行node.js

上代码

//require为引用模块
let express = require('express')
let Mock = require('mockjs')
//将Mock造的数据解构,这样下面可以直接提取goodsList变量
let {goodsList} = Mock.mock({
    'goodsList|50':[{
        "id|+1":1001,
        "name":"@cword(3,5)",
        "price":"@integer(10,50)"
    }]
})
let app=express()
//输入网址http://localhost:8888/list,会显示出来的结果
//request和response对象来处理请求和响应的数据。
app.get('/list',(req,res)=>{
//req为请求的数据设置pageIndex为请求的页码,若前端请求数据没有请求此数据,则默认第一页
    let pageIndex=parseInt(req.query.pageIndex || 1)
    let pageSize = parseInt(req.query.pageSize || 10)
    //根据规律得出每页的数据在数组的开始和结束的下标
    let start = pageSize*(pageIndex-1)
    let end = start + pageSize
    //设置1s延时,这样方便后面小程序代码loading的效果
    setTimeout(() => {
    //goodsList是一个数组,用slice方法截取当前页的数据
    res.json(goodsList.slice(start,end))
        
    }, 1000);
})
//app.listen启动一个服务器来监听连接,成功的话终端会打印app is running...
app.listen(8888,()=>{
    console.log('app is running...');
    
})

输入网址http://localhost:8888/list得到数据,可通过http://localhost:8888/list?pageIndex=3得到第三页的数组

image

小程序调用数据

  • 需要引用之前封装的$get函数
  • 上拉刷新事件,需在当前页面的json文件中开启当前页面下拉刷新。
{
  "usingComponents": {},
  "enablePullDownRefresh": true,
  "backgroundColor": "#f00"
}
<!--pages/shoppingCar/shoppingCar.wxml-->
<view wx:for='{{goodsList}}' wx:key='id'
style="border-bottom:2rpx solid #eee;padding:20rpx 5rpx;">
  <view>id:{{item.id}}</view>
  <view>商品名字:{{name}}</view>
  <view>单价:{{price}}</view>
</view>
// pages/shoppingCar/shoppingCar.js
import {
  $get,
} from '../../utils/fun.js'

Page({

  async pull() {
    //之前$get封装时已经将url地址的常量封装,所以只要输入list拼接就可
    let goodsList = await $get('list', {
      //每次执行函数时页数+1
      pageIndex: this.data.pageIndex++,
      pageSize: 8
    })
    //当没有数据时,goodsList数组为空,此时结束后面的操作显示no more
    if (!goodsList.length)
      return wx.showToast({
        title: 'no more',
        icon: 'none'
      })
    this.setData({
      //用concat拼接数组,使上拉时不是切换页面的效果而是拼接的效果
      goodsList: this.data.goodsList.concat(goodsList)
    })

  },
  /**
   * 页面的初始数据
   */
  data: {
    goodsList: [],
    pageIndex: 1
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    this.pull()
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {
    //当下拉时执行1s后停止下拉
    setTimeout(() => {
      wx.stopPullDownRefresh()
    }, 1000)
    //下拉后数据清空,所以数据改为原始数据
    this.data.goodsList = [],
      this.data.pageIndex = 1,
      //执行pull函数
      this.pull()
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {
    //页面加载时执行pull函数
    this.pull()
  }

})
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Mock 安装 生成随机数据,模拟ajax请求 # 安装 npm install mockjs # 引用 impo...
    把我当做一棵树叭阅读 1,262评论 0 1
  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,449评论 1 37
  • 学习目的 ①开发时,后端还没完成数据输出,前端只好写静态模拟数据。数据牵制与后端,前端页面无法很好的展示,...
    _1633_阅读 4,545评论 0 24
  • 很早就想总结下关于mock data 这部分的内容,现在刚好把它总结一下吧。 首先之前完成的许多项目都是自己独立完...
    喵喵喵不吃小鱼干阅读 4,664评论 0 3
  • 2019年10月23日 星期三 晴 世人都爱面子,自古以来就有“打人不打脸,揭人不揭短”的说法...
    慢步细雨中阅读 219评论 0 1