欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 微信小程序实战--流动图书馆

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:740

高端HTML5响应式企业通用网

2020-05-06   浏览:521

html5响应式外贸网站英文版

2020-05-08   浏览:510

HTML5自适应律师工作室类网

2020-04-04   浏览:504

HTML5影视传媒文化公司类网

2020-05-12   浏览:502

微信小程序实战--流动图书馆

发布时间:2020-12-22  

流动图书馆流动图书馆是一个图书漂流和借阅工具,旨在共享闲置图书,并链接趣味相投的小伙伴。预览链接技术栈小程序MINA框架: 一个响应的数据绑定框架。分为两块视图层(View)和逻辑层(App Service)Flex:flex弹性布 ...

流动图书馆

流动图书馆是一个图书漂流和借阅工具,旨在共享闲置图书,并链接趣味相投的小伙伴。

预览

链接

技术栈

小程序MINA框架: 一个响应的数据绑定框架。分为两块视图层(View)和逻辑层(App Service)

Flex:flex弹性布局

Express : http服务框架

websocket: 前后端消息的实时推送

mongoose: 操作mongodb数据库

pm2: 服务端使用pm2部署,常驻进程

截图 首页

微信小程序实战--流动图书馆

借阅书架

微信小程序实战--流动图书馆

发布的图书

微信小程序实战--流动图书馆

借阅的图书

微信小程序实战--流动图书馆

客户端

代码结构

微信小程序实战--流动图书馆

微信小程序中每个页面会有四个文件 .js .json .wxml .wxss
js文件中是页面的逻辑,json文件是页面的一些配置,wxml是小程序的页面结构,wxss为页面的样式。

封装http请求

const request = (obj) => { if(obj.header){ obj.header.sessionId = session.sessionId; }else{ obj.header = { sessionId: session.sessionId}; } wx.request(obj); }

在请求头中手动加上sessionId,因为小程序没有cookie。

websocket

//连接websocket wx.connectSocket({ url: 'wss://liudongtushuguan.cn/socket?sessionId=' + session.sessionId, }); wx.onSocketOpen(function(res){ }); wx.onSocketClose(function(res){ console.log('websocket closed'); }); wx.onSocketMessage(function(res){ //收到消息的回调 let msg = JSON.parse(res.data); let msgs = that.data.borrowMessage; msgs.unshift(msg); that.setData({ borrowMessage: msgs}); }); //发送socket消息 let data = JSON.stringify({ targetId: bookData.ownerId, nickName: APP.globalData.userInfo.nickName, bookName: bookData.title, time: new Date().toLocaleString(), bookId: bookId, wxNum: wxNum, phoneNum: phoneNum, msg: msg, }); wx.sendSocketMessage({ data: data, });

服务端

代码目录

微信小程序实战--流动图书馆

Express框架实现http服务

const https = require('https'); const fs = require('fs'); const express = require('express') const cookieParser = require('cookie-parser'); const bodyParser = require('body-parser'); const app = express(); const queryString = require('querystring'); const URL = require('url'); const socket = require('./service/socket'); const router = require('./routes/router').router; //获取认证证书 var key = fs.readFileSync('./key/2_'); var cert = fs.readFileSync('./key/1_'); var options = { key : key, cert : cert, }; app.use(cookieParser()); app.use(bodyParser.json()); const httpsServer = https.createServer(options,app); httpsServer.listen(443,() =>{ console.log('listening 443 port'); }); socket(httpsServer); //websocket app.use(router);

小程序规定必须要用https协议。

websocket模块

这里使用ws模块而没有选择使用socket.io,因为小程序客户端不支持socket.io

const WebSocket = require('ws'); //使用ws模块 const queryString = require('querystring'); const URL = require('url'); const sessions = require('./session'); module.exports = (httpServer) => { const wss = new WebSocket.Server({server : httpServer}); wss.on('connection',(ws, req) => { let sessionId = queryString.parse(URL.parse(req.url).query).sessionId; ws.id = sessionId; ws.on('message' , (msg) => { let msgObj = JSON.parse(msg); if(sessions[msgObj.targetId]){ wss.clients.forEach((client) => { if(client.id === msgObj.targetId){ let data = { time : msgObj.time, borrower :msgObj.nickName, book :msgObj.bookName, borrowerId : sessions[sessionId], bookId : msgObj.bookId, wxNum : msgObj.wxNum, phoneNum : msgObj.phoneNum, msg : msgObj.msg }; client.send(JSON.stringify(data)); } }); } }); }); };

mongoose操作数据库

db.js: