加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

微信小程序--GET请求案例&文件上传和相册API&配置https

发布时间:2020-12-14 19:09:06 所属栏目:资源 来源:网络整理
导读:一、信息流小程序 -GET 请求案例 1.1 服务端接口开发 一定要养成接口的意识,前端单打独斗出不来任何效果,必须有接口配合,写一个带有分页、关键词查询的接口: 分页接口: http://127.0.0.1:3000/info?page=1 查询接口: http://127.0.0.1:3000/search?wor

一、信息流小程序-GET请求案例

1.1服务端接口开发

一定要养成接口的意识,前端单打独斗出不来任何效果,必须有接口配合,写一个带有分页、关键词查询的接口:

分页接口:http://127.0.0.1:3000/info?page=1

查询接口:http://127.0.0.1:3000/search?word=

详情接口:http://127.0.0.1:3000/xiangqing?id=2

复制代码

const express = require("express");
const app = express();
const url = require("url");
const info = require("./info.js");
app.use(express.static("www"));

//显示分页的明星信息
app.get("/info",(req,res) => {
    const page = url.parse(req.url,true).query.page; //得到GET请求的page参数

    //提供分页的接口
    res.json({
        "arr" : info.slice((page-1) * 4,page * 4)
    });
});

关键字筛选查询
app.get("/search",res) => {
    得到用户的查询词
    var word = url.parse(req.url,true).query.word;
    将字符串word变为正则表达式
    var wordExp = new RegExp(word);
    遍历,筛选
    res.json({
        "arr" : info.filter(item => wordExp.test(item.name))
    });
});

某明星详情
app.get("/xiangqing",0); line-height: 1.5 !important;">得到用户的查询的明星id
    var id = url.parse(req.url,255); line-height: 1.5 !important;">true).query.id;
    遍历,筛选
    res.json({
        "xiangqing" : info.filter(item => item.id == id)[0]
    });
})
app.listen(3000);

复制代码


1.2小程序开发

学习scrioll-view容器(可滚动视图区域)和发起请求。

<scroll-view style="height:{{wH}}px;" scroll-y bindscrolltolower="tolower">
    view>乱起八早</>
.....
scroll-view>

bindscrolltolower表示滚动到底部的事件,但这个盒子必须有高度。

如果希望这个盒子的高度和窗口的高度一样,此时调用微信API,读取设备窗口高度。

?

app.js使用微信小程序的API得到屏幕的高度:

app.js App({ 用户首次打开小程序,触发 onLaunch函数(全局只触发一次) onLaunch(){ var self = this; //读取设备信息的API wx.getSystemInfo({ success: function(res){ self.globalData.gWH = res.windowHeight; //获取窗口高度赋值给全局gWH对象 } }); },全局数据 globalData : { gWH : 0 } });

复制代码

?

index.js中可以获取app.js的全局数据

<!--index.wxml--> view class="container"> ="height:{{wH}}px">   <view class="mingxing"> <view class="box" wx:for="{{mingxing}}" wx:key="{{index}}"> ="left"> image src="{{baseURL}}/images/{{item.pic}}"></image> {{item.name}} </view> <view class="right"> {{item.b_info}} </view> </view>     </view> >

复制代码

?

index.wxss

?示例代码

1.4请求分页数据-显示页面效果

index.js中加载默认数据

Page({ 得到窗口的高度,是从全局来的 this.setData({ wH: appInstance.globalData.wH }); 核心语句:请求服务器的数据,参数page表示第几页,当前第几页就请求第几页 var self = this; wx.request({ //请求的地址 url: 'http://127.0.0.1:3000/info?page=' + this.data.page,//成功的回调 success({data}){ self.setData({ mingxing: [ ...self.data.mingxing,...data.arr ] }); } }); },data : { wH : 0,0); line-height: 1.5 !important;">当前屏幕的高度 mingxing: [],//信息流,现在是空的,等服务器返回 page : 1,//当前第几页,默认第一页 } });

复制代码

?

?

?

?

index.js下拉请求更多

,icon: 'loading',duration: 2000000 持续时间,非常长,因为靠回调函数给它隐藏。 }); this; 核心语句,请求服务器的数据,分页请求,当前第几页就请求第几页 wx.request({ 请求的地址 url: this.data.baseURL + '/info?page=' + page,0); line-height: 1.5 !important;">成功的回调 success({ data }){ 隐藏Toast wx.hideToast(); 看一下请求的数组长度是不是0,如果是0此时就改变信号量 if(data.arr.length == 0){ self.setData({ isMore : false }); return; } 如果不是0,改变值,追加数据 self.setData({ mingxing: [ ...self.data.mingxing,...data.arr ] }); } }); } Page({ onLoad(){ 指定queryServer函数的上下文,绑定好后,调用时上下文自动就是这里的this了 //不需要queryServer.call(this)了。 queryServer = queryServer.bind(this); this.setData({ wH: app.globalData.wH }); 请求第1页的数据 queryServer(1); },data : { wH : 0,mingxing: [],page : 1,baseURL:"http://127.0.0.1/3000",//基路径 isMore : true //是否还有更多? },tolower(){ if(this.data.isMore){ //页面数加1 this.setData({ page : this.data.page + 1 }); //下拉到底部请求更多 queryServer(this.data.page); } } });

复制代码


1.5关键字查询

>×button

复制代码

index.wxss?

?示例代码

?

index.js

Page({ data : { ... },tolower(){ ... },0); line-height: 1.5 !important;">执行查询 doSearch(event){ var self = this; wx.request({ url: baseURL + "/search?word=" + event.detail.value,success({data}){ self.setData({ mingxing : data.arr }); } }); },0); line-height: 1.5 !important;">清空查询 clearSearch(){ this.setData({ searchWord : "",mingxing : [] }); //重新请求当前的页码,显示全部 //循环请求,比如当前页码是2,此时就要请求2、1 for(let i = 1 ; i <= this.data.page ; i++){ queryServer(i); } } });

复制代码


1.6点击查看详情

index.wxml

> ..... >

?

info.wxml详情页

="{{baseURL}}/images/{{pic}}" {{info}}

复制代码

?

index.js

基路径 const baseURL = "http://127.0.0.1:3000"; Page({ onLoad({mid}){ var self = this; wx.request({ url : baseURL + "/xiangqing?id=" + mid, success({data}){ self.setData({ name: data.xiangqing[0].name,pic : data.xiangqing[0].pic,info: data.xiangqing[0].info }) } }) }, data : { name : "",pic : "",info : "", baseURL } });

复制代码


二、文件上传和相册API

2.1小程序和Nodejs后端

前端是小程序,后端Nodejs,用formidable来处理POST请求,上传图片。

?

在小程序中发起POST请求

复制代码

Page({
    fasong: function(){
        wx.request({
            //请求地址
            url: 'http://127.0.0.1:3000/tijiao',//请求类型
            method : "POST",//提交给服务端的数据
            data : {
                a : 8
            },//成功的回调函数
            success : function({data}){
                console.log(data.result);
            }
        });
    }
});

复制代码

后端:

?示例代码

2.2?图片的上传

在微信中是两个事:

第一:调用wx.chooseImage()这个API,让用户选择一个图片文件或者拍照;

第二:调用wx.uploadFile()这个API,来传输文件。

?

从本地相册选择图片或使用相机拍照API

wx.chooseImage();

?

上传文件的API

wx.uploadFile();

chooseImg(){ 选择图片或者进行拍照 wx.chooseImage({ count : 1,0); line-height: 1.5 !important;">只能选择1张 选择图片成功之后做的事情 success({tempFilePaths}){ wx.uploadFile({ url : "http://127.0.0.1:3000/tijiao",0); line-height: 1.5 !important;">上传地址 filePath: tempFilePaths[0],//要上传的文件,只有1张图片也是数组,所以[0] name: "tupian",//key success({data}){ wx.showToast({ title: "上传成功!" }); } }); } }); } });

复制代码

?

后端formidable可以处理图片的上传,只需要加一句话:

const express = require("express"); const app = express(); const formidable = require("formidable"); app.post("/tijiao",res)=>{ var form = new formidable.IncomingForm(); form.uploadDir = "./uploads"; //设置图片的保存路径 form.keepExtensions = true; //保留拓展名 form.parse(req,(err,fileds,file)=>{ res.json({result: "ok"}); }); }); app.listen(3000);

复制代码

?

开启下拉刷新,在需要下拉刷新的页面中index.json中添加:

{
    "enablePullDownRefresh" : true
}

复制代码

const express = require("express");
const app = express();
const formidable = require("formidable");
const fs = require("fs");

静态化图片目录
app.use("/uploads",express.static("uploads"));


处理用户的提交
app.post("/tijiao",255); line-height: 1.5 !important;">new formidable.IncomingForm();
    form.uploadDir = "./uploads"; 设置图片的保存路径
    form.keepExtensions = true;   保留拓展名

    form.parse(req,files) => {
        将上传文件改名为现在的时间戳,就是1970年1月1日到现在的毫秒数
        var date = Date.parse(new Date());
       var ext = path.extname(files.tupian.path); //获取文件扩展名
        //改名
        fs.rename(`./${files.tupian.path}`,`./uploads/${date}${ext}`,function(){
            res.json({result : "ok"});
        });
    });
});

列出所有文件的清单
app.get("/list",res)=>{
    fs.readdir("./uploads",files) => {
        res.json({ imgList: files.reverse()});
    });
});

app.listen(3000);

复制代码

Page({
    xuantu(){
       ...
    },0); line-height: 1.5 !important;">显示所有已经上传的图片
    onLoad(){
        var self = this;
        wx.request({
            url: "http://127.0.0.1:3000/list",success({data}){
                self.setData({
                    imgList: data.imgList
                })
            }
        });
    },0); line-height: 1.5 !important;">当下拉刷新的时候
    onPullDownRefresh(){
        var self = this;
        wx.request({
            url: "http://127.0.0.1:3000/list"

复制代码


2.3获取微信用户信息

?示例代码

三、Nodejs配置https

首先,需要申请SSL证书,证书可以在阿里云、腾讯云、宝塔等平台申请,申请成功后会提供SSL证书下载地址,下载好SSL证书会看见一个压缩包,里面包含很多版本的证书文件(IISApacheNginxTomcat)等,Nodejs服务端采用Nginx版本即可,里面有两个文件分别是:.key.pem文件。

?

将文件放在你的Node项目中的某个文件夹中,这里我放在根目录的ssl文件夹中。

然后写以下Node代码即可开启https

注意:要修改自己的keypem文件路径和名称

尽量让它越来越规范,这些文章都是本人的学习时的笔记整理,希望看完后可以指点一二,提提意见多多交流,自由转载-非商用-非衍生-保持署名。 笔记流程:html>css>javascript>jquery>html5/css3>移动端>ajax>面向对象>canvas>nodejs>es678>vue>react>小程序 联系邮箱:scarf666@163.com 有朋友私信问我是怎么学习的,在哪里学习的,感兴趣想学习朋友的可以私信我。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读