小程序技术栈
前端uniapp 后端nodejs 数据库 mongodb
开发准备
本人第一次在掘金上写技术分享,心里怪激动的。哈哈哈,废话不多说,下面上本次开发的重点。
开发没有采用微信的原生开发,用的是uniapp框架,因为之前写过,所以感觉还是比较方便的,并且有比较好的插件市场。
2、微信开发工具安装
3、打开hbuilder-文件-新建-项目 选择 uniapp uniapp项目
4、打开微信开发工具扫码登陆后点开右上角的 设置-安全-服务端口打开。
打开刚刚创建的uniapp项目。选择编辑器的工具-设置-运行配置 找到外部web服务器调用url
修改为127.0.0.1:刚才的微信开发工具的端口号,找到微信开发者工具路径配置。将安装的微信开发工具导入 例D:/微信web开发者工具
5、前面的准备工作完成后,就可以进行项目开发了。选择编辑器运行-运行到小程序模拟器-打开微信开发者工具
半成品效果展示
前端主要页面开发
1、首页主要展示图片,后续会做成动态的。
2、动态页面主要是爬虫获取每日的运势,默认为天蝎座
3、心语界面,其他人可以留言祝福
4、审核页面隐藏在页面的某个位置(大家猜猜看看怎么进入)。
后端开发
后端主要使用了express项目生成器,由于本项目还未完全开发完毕,暂时不做开源。下面附上部分代码
1、端口代码 routers/index.js
var express = require('express');
var router = express.Router();
const MsgContent = require("../bin/config/data/msgContent")
const EveryDay = require("../bin/config/data/everyday")
/* GET home page. */
router.post('/addMsg',async function(req, res, next) {
let result = await MsgContent.addOneMsg(req.body)
res.json({code:"1",msg:"留言添加成功"})}
);
router.post('/findAllMsg',async function(req, res, next) {
let result = await MsgContent.findAllMsg(req.body)
res.json({code:"1",msg:"留言查询成功",data:result.list,total:result.total})});
router.post('/findAllMsgSee',async function(req, res, next) {
let result = await MsgContent.findAllMsgSee(req.body)
res.json({code:"1",msg:"留言查询成功",data:result.list,total:result.total})}
);
router.post('/passMsg',async function(req, res, next) {
let result = await MsgContent.passMsg(req.body)
res.json({code:"1",msg:"留言审核通过"})});
router.post('/deleteMsg',async function(req, res, next) {
let result = await MsgContent.deleteMsg(req.body)
res.json({code:"1",msg:"留言删除成功"})}
);
router.post('/findTodayMsg',async function(req, res, next) {
let result = await EveryDay.findAllMsg()
res.json({code:"1",msg:"今日运势查询成功",data:result})}
);
module.exports = router;
2、model层代码
var mongoose = require("../db");var moment = require("moment")var ObjectId = require('mongodb').ObjectIdvar msgcontent = new mongoose.Schema({ imgurl: String, createdTime: { type: String, default: () => moment(new Date()).format("YYYY-MM-DD HH:mm:ss") }, //创建时间 content: String, userName: String, ispass: { type: Number, default: 0 }})var MsgContent = mongoose.model("msgcontent", msgcontent);MsgContent.addOneMsg = async function (data) { let information = new MsgContent(data) let result = await information.save() return result}MsgContent.deleteMsg = async function (data) { console.log(data) let result = await MsgContent.deleteOne({ _id: ObjectId(data.id) }) console.log(result) return result}MsgContent.passMsg = async function (data) { console.log(data) let result = await MsgContent.updateOne({ _id: ObjectId(data.id) }, { $set: { ispass: data.ispass } }) console.log(result) return result}MsgContent.findAllMsg = async function (data) { let { size, page } = data size = size * 1 page = page * 1 let sqlContent = [ { $sort: { createdTime: -1 } }, { $match: { ispass: 1 } }, { $skip: (page - 1) * size, }, { $limit: size, }] let result = await MsgContent.aggregate(sqlContent) let total = await MsgContent.count() return { list: result, total: total }}MsgContent.findAllMsgSee = async function (data) { let { size, page } = data size = size * 1 page = page * 1 let sqlContent = [ { $sort: { createdTime: -1 } }, { $skip: (page - 1) * size, }, { $limit: size, }] let result = await MsgContent.aggregate(sqlContent) let total = await MsgContent.count() return { list: result, total: total }}module.exports = MsgContent;
3、定时任务代码(主要是爬取每日运势)
const superagent = require('../bin/everyday/superagent')const config = require('../bin/everyday/index')const cheerio = require('cheerio')const schedule = require('node-schedule');const EveryDay = require("../bin/config/data/everyday")class Sechedule { constructor() { this.config = config } async onePaper() { try { let res = await superagent.req(config.ONE, 'GET') let $ = cheerio.load(res.text) let todayList = [] for(let i =0 ;i<5;i++){ todayList.push({name:$($(`.p${i+1}`)).text(),content:$($(`.c_cont>p span`)[i]).text()}) } return todayList } catch (err) { return err } } async startSechedult(){ console.log("定时任务开启") schedule.scheduleJob(config.SENDDATE,async ()=>{ let result = await this.onePaper() let addMsg = await EveryDay.addTodayMsg({content:result}) }) }}module.exports = new Sechedule
写在最后
1、本项目代码暂时不开源,有想开发的朋友可以私聊我
2、后续会增加,留言通知功能,自定义首页展示等等一些好玩的功能
3、本项目中的爬虫示例仅供学习使用,如果侵权,请联系我,会第一时间删除
4、后续会出一篇更为详细的教程
5、希望广大程序员朋友都能找到一个爱自己的女朋友。哈哈
联系我
QQ:499410651