# mbook **Repository Path**: bookbar/mbook ## Basic Information - **Project Name**: mbook - **Description**: 为了便于二次开发、下载代码,同步到开源中国,如果侵犯到原作者还请发消息联系。 源地址:https://github.com/Andyliwr/mbook.git - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2020-02-28 - **Last Updated**: 2022-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # **graduationDesign** 毕业设计--基于微信小程序的在线免费小说的开发,该项目借助微信小程序的便捷特性,为用户提供快速,并且舒适的阅读体验。负责项目的原型设计,和小程序代码的开发。实现了书城,我的书单,以及在线阅读器功能,目前该项目已经吸引了一批身边爱好阅读的好友用户。 ## **项目截图**
## **运行** 建议使用VSCode+wept开发微信小程序,VSCode安装JWSnippets-For-VSCode就可以将wxml、wxss解析成html和css,而wept支持使用chrome来调试微信小程序。下面讲讲这两种方法的使用: ### **`JWSnippets-For-VSCode`** 1. [下载安装VSCode](https://code.visualstudio.com) 2. 下载[JWSnippets-For-VSCode](http://pan.baidu.com/s/1miuOy84), 提取码:8xan 3. 安装JWSnippets-For-VSCode --- **A. 将json文件放入IDE的sinppets目录:** `VSCode` - Windows版本:`C:\Users\用户名\AppData\Roaming\Code\User\snippets` - Mac版本:`/Users/用户名/Library/Application Support/Code/User/snippets` `Wing` - Windows版本:C:\Users\用户名\AppData\Roaming\EgretWing\User\snippets - Mac版本:/Users/用户名/Library/Application Support/EgretWing/User/snippets > 如果找不到上述目录,可以打开IDE菜单->首选项->用户代码片段,分别选择Javasript、HTML(或者WXML),将下载的文件代码手动copy进去,保存即可。 **B. 打开IDE菜单->首选项->用户设置,在settings.json加入以下代码:** `VSCode:` ``` "files.associations": { "*.wxml": "html", "*.wxss": "css"} ``` `Wing:` ``` "files.associations": { "*.wxss": "css"} ``` **C. 为防止和其他命令冲突,本sinppet触发命令以'jw'开头。** 如有疑问,可参照johnwang77大神的[github](https://github.com/johnwang77/JWSnippets-For-VSCode/blob/master/README.md) ### **`WEPT`** `WEPT` 是一个微信小程序实时开发环境,它的目标是为小程序开发提供高效、稳定、友好、无限制的运行环境。项目后台使用 node 提供服务完全动态生成小程序,前端实现了 view 层、service 层和控制层之间的相关通讯逻辑。支持 Mac, Window 以及 Linux **1. 主要特性**: + 支持 wxml, wxss, javascript 和 json 保存后热更新 + 支持系统 notification 更早提示构建和请求错误 + 使用后台转发 XMLHttpRequest 请求,无需配置 CORS, 可 配置代理 + 支持 所有小程序公开 API + 可使用 Chrome 移动页面调试,可在移动端体验 + 支持 appData 和 storage 面板,需下载 [Chrome 插件](https://chrome.google.com/webstore/detail/wechat-devtools-extension/cmpjfobofbhbghjodehbohchlghacmll) **2.安装与运行** ``` npm i wept -g cd 微信小程序所在目录 wept -p 3100 ``` 启动之后直接在浏览器里打开`localhost:3100`并启用手机调试模式就好了。 ## **启动后台接口** ``` 启动mongodb mongod --config=E:\mongod_install\mongod.conf 启动redis redis-server.exe redis.windows.conf 启动接口 cd api node . ``` ## **目录说明** ``` api --- 提供后台接口 |-client --- 暂无用处 |-common --- loopback的公共模型 |-server --- loopback的服务器模型 |- boot --- 初始化执行脚本 |- modle --- 所有定义的模型目录 |- datasources.json --- 数据源定义文件 |- middleware.json --- 中间件配置文件 |- modle-config.json --- 模型定义文件 |- server.js --- 主程序 reptile --- 所有的爬虫目录 |- connectDB --- 连接数据库,操作数据库方法类 |- tools --- 实用方法类 |- networkReptile.js --- 爬虫主程序 |- config.js --- 爬虫配置js weixin --- 微信小程序目录 |- assets --- 静态资源文件 |- datas --- 静态数据 |- images --- 图片资源文件 |- page --- 所有微信小程序的页面 |- util --- 工具类 |- app.js --- 微信小程序入口文件 ``` ## **前端完成进度** 1. 登录页面 --- done 2. 今日页面 --- 改版成为个人中心页 3. 我的书单页面 --- 完成了静态页面,尚未写接口逻辑 4. 教务页面 --- 完成了静态页面,尚未写接口逻辑 5. 书单排行榜页面 --- 完成了静态页面,并调用了获取排行榜的接口,现余下要修复的bug如下,A:纵横网言情分类返回的数据都是xxx的模拟数据,B:排行每本书的点击事件,这个要等book_detail完成之后才会得到解决 6. 书城页面 --- 完成了静态页面,尚未写接口逻辑 7. 开始book_detail页面的编写 --- 8. 使用gulp和scss来管理微信小程序的代码 --- 废弃使用webpack打包小程序 9. 阅读器 --- 已完成 ## **后端完成进度** 1. 爬虫升级 --- done ,现在可以同时爬去百度贴吧和爱下电子书两个来源的小说 2. 排行榜的爬虫 --- 已完成 3. 新增排行榜的接口 --- 已完成,今天又修复了两个bug,A:rank中的书籍信息增加bookId方便以后根据此id定位到bookDetai页面,B:攻破起点网小说图片防盗链的小关卡 4. 开始书城中推荐版块,免费新书版块后端接口的建设 5. 改进之前的factionContents模块,增加根据bookId获取书籍包括所有章节和一些其他信息的接口 6. 微信登录 --- 正在进行 ### 测试未绑定的微信的用户 auth: {\"type\": \"wechat\", \"wxOpenId\": \"oj7fq0NOUGhlm798MwxrIGmmFXTM\"} ### 爱下电子书过滤章节的规则 + 爱下电子书常用的小说章节命名: ``` 5.第5章 忠心弟子 第四章 大浮屠诀 公告!此书暂停! 完本感言以及新书发布! 〖免费公告〗关于结局加更一章!!! 010 强化训练(四) 第0228章 哈赤之墓(2) 五 驯服 ``` + 过滤正则表达式: ``` 第[一二...十0123...9]章 [0-9] 没有任何数字的,全部去掉 ``` + 注释: 过滤之后trim去掉空格 ### 常用的mongo查询 ``` //查询所有这部小说的章节并排序 db.getCollection('factioncontents').find({des: /天影/, sectionResource:'爱下电子书'}).sort({sectionNum: 1}) //查询这部小说的详细信息 db.getCollection('factionlists').find({factionName: '天影'}) ``` ### mongoose查询链式语法 ``` Person .find({ occupation: /host/ }) .where('name.last').equals('Ghost') .where('age').gt(17).lt(66) .where('likes').in(['vaporizing', 'talking']) .limit(10) .sort('-occupation') .select('name occupation') .exec(callback); ``` ### 如何使用node promise ``` var promise = require('bluebrid'); Myappuser.find({username: 'lidikang'}) .then(function(res){ console.log(res); callback(null, 'hi'); }) .catch(function (err) { console.log(err); }); ``` ### find ``` var docs = yield collection.find({}) .skip(1).limit(1).project({b:1}).toArray(); test.equal(1, docs.length); test.equal(null, docs[0].a); test.equal(2, docs[0].b); // Close db db.close(); ``` ### 剩余要做的 + 前端在每次用户离开的时候存储一个时间,后端getMyBooks接口的时候返回updateTime这个字段,前端用这个字段做判断,已经阅读的不再提示 + 后端直接对比最新章节数和以阅读章节数 ### py_spider 搜索地址: 1. http://zhannei.baidu.com/cse/search?s=7466980319800320338&loc=http%3A%2F%2Fwww.ixdzs.com%2Fbsearch%3Fq%3D%25E5%25A4%25A7%25E4%25B8%25BB%25E5%25AE%25B0&width=580&q=%E5%A4%A7%E4%B8%BB%E5%AE%B0&wt=1&ht=1&pn=10&fpos=2&rmem=0®=