谁说程序员不会浪漫,记一次微信小程序0-1全栈开发,开发完女朋友就知道你的浪漫了。

215 阅读3分钟

小程序技术栈

前端uniapp 后端nodejs 数据库 mongodb

开发准备

本人第一次在掘金上写技术分享,心里怪激动的。哈哈哈,废话不多说,下面上本次开发的重点。

开发没有采用微信的原生开发,用的是uniapp框架,因为之前写过,所以感觉还是比较方便的,并且有比较好的插件市场。

1、Hbuilder 开发工具安装

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、希望广大程序员朋友都能找到一个爱自己的女朋友。哈哈

联系我

个人博客地址->www.czh1995.top

QQ:499410651