范围:深圳亚博app开发,软件定制开发,亚博app软件开发公司,深圳软件外包公司.TEL:3447249690
当前位置:首页 > app小程序

亚博-微信小程序图书馆实战开发教程

07-06 亚博APP
摘要:藏书楼小法式框架: 一个响应的数据绑定框架。分为两块视图层和逻辑层

藏书楼小法式是一个图书飘流和借阅东西,旨在同享闲置图书,并链接趣味相投的小火伴。需求上可以知足用户碎片时候的浏览,分享给小火伴,发布图书和保藏等。本篇教程给读者介绍如许一个藏书楼小法式的实战开辟。

手艺栈

小法式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_www.liudongtushuguan.cn.key\'); var cert = fs.readFileSync(\'./key/1_www.liudongtushuguan.cn_bundle.crt\'); 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模块而没有选择利用http://socket.io,由于小法式客户端不撑持http://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: const mongoose = require(\'mongoose\'); mongoose.connect(\'mongodb://app:[email protected]/wxapp\'); const connection = mongoose.connection; connection.once(\'open\', (err) => { if(err){ console.log(\'Database connection failure\'); }else{ console.log(\'Database opened\'); } }); connection.on(\'error\',(err) => { console.log(\'Mongoose connected error \'+ err); }); connection.on(\'disconnected\', () => { console.log(\'Mongoose disconnected\'); }); module.exports = { connection : connection, mongoose : mongoose, }; model.js: const Schema = mongoose.Schema; const UserSchema = new Schema({ onlyId : {type: String}, publishedBooks : {type: Array}, borrowedBooks : {type: Array}, borrowMessages : Array, }); const BookSchma = new Schema({ isbn : String, title : String, press : String, author : String, rate : String, tags : String, image : String, status : {type : Boolean,default : true}, ownerId : String, owner : String, ownerImage : String, }); const userModel = mongoose.model(\'user\' , UserSchema); const bookModel = mongoose.model(\'book\' , BookSchma); module.exports = { UserModel : userModel, BookModel : bookModel, }

取得微信誉户的openId

小法式前端会要求微佩服务器获得一个code, 将code发送给本身的办事器,然后本身的办事器给微佩服务器发送要求,获得微信誉户的独一标识openId const https = require(\'https\'); const queryString = require(\'querystring\'); const sessions = require(\'./session\'); module.exports = (req, res, next) => { let code = req.query.code; let otherRes = res; DATA.js_code = code; OPTION.path = PATH + queryString.stringify(DATA); let wxReq = https.request(OPTION, (res) => { if(res.statusCode == 200){ let json = \'\'; res.on(\'data\' , (data) => { json+=data; }); res.on(\'end\' , () => { json =JSON.parse(json); let openId = json.openid; sessions[openId] = openId; otherRes.type(\'application/json\'); otherRes.json({ data : {\'sessionId\' : openId}, }); otherRes.status(200); }); } }); wxReq.end(); };

总结

藏书楼小法式可以由三小我的小团队设计和开辟的。对那些初度开辟小法式的新手是很好的提高,从办事端到搭建利用的雏形,实现根基结果,再到最后拆分整合代码,会闪开发者也收成了良多。从数据库的设计到后台数据库操作、会话治理、http办事接口一向到前后端数据交互、小法式前端,对法式开辟的年夜致流程有了更进一步的领会,填补的之前对办事端常识的缺掉。

保举浏览:微信小法式开辟挪用当地接口教程微信小法式开辟教程

版权保护: 本文由 亚博app开发 原创
转载请保留链接: http://www.cqsLin.com

关于我们      深圳亚博定制开发软件有限公司,自2013年成立以来,为上千家企业提供软件外包、系统软件开发、亚博app开发、微信公众号开发、深圳亚博小程序开发等各种优秀的软件定制开发服务.关键词:软件外包公司、手机软件开发、app制作开发、手机亚博app开发、小程序开发公司【TEL】:3447249690 微信:3447249690 QQ:3447249690
  • 1578文章总数
  • 13访问次数
  • 建站天数