小程序+node+mysql做的小项目
git源码地址: https://github.com/songkangle/weixin_node
小程序页面





数据库
user表

dream表

node的express框架index.js
var express = require('express');
var http= require("http");
var request = require('request');
var router = express.Router();
var index = require('../model/index.js');
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root', //你的密码(就是这个该死的密码坑死我了)
database : 'dream' //你的数据库
});
connection.connect();
// 用户授权 -- 登录
router.post('/login',function(req,res,next){
if(req.body.code){
var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=你的APPID&secret=你的密钥&grant_type=authorization_code&js_code='+req.body.code;
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var bodyData = JSON.parse(body)
res.send({
code: '0',
messages: '处理成功',
data: bodyData
});
}
})
}
})
// 存入用户数据
router.post('/insertUserData', function(req, res, next) {
if(!req.body.openid || !req.body.nickName || !req.body.avatarUrl){
res.send({
code: '1001',
messages: '参数不完整',
data: null
});
return
}
var openid = req.body.openid;
var nickName = req.body.nickName;
var province = req.body.province;
var city = req.body.city;
var country = req.body.country;
var avatarUrl = req.body.avatarUrl;
var gender = req.body.gender;
connection.query("select * from user where openid ='"+req.body.openid+"';",function(err,result){
if(err){
res.render("查找失败"+err.message);
return
}else {
if(result){
res.send({
code: '0',
messages: '已授权',
data: null
});
}else{
const addUserSql = "insert into user(id,openid,nickName,province,city,country,avatarUrl,gender) values(?,?,?,?,?,?,?,?)";
var addUserData = [0,openid,nickName,province,city,country,avatarUrl,gender];
connection.query(addUserSql,addUserData,function(err,result){
if(err){
res.render("插入失败"+err.message);
}else {
res.send({
code: '0',
messages: '处理成功',
data: null
});
}
});
}
}
});
})
// 获取用户数据
router.get('/getUserData', function(req, res, next) {
if(!req.query.openid){
res.send({
code: '1001',
messages: '参数错误',
data: null
});
return
}else{
connection.query("select * from user where openid ='"+req.query.openid+"';",function(err,result){
if(err){
res.render("查找失败"+err.message);
return
}else{
if(result){
res.send({
code: '0',
messages: '处理成功',
data: result[0]
});
}
}
})
}
});
//
router.post('/addDream', function(req, res, next) {
var userId = req.body.userId;
var dreamTitle = req.body.dreamTitle;
var dreamDesc = req.body.dreamDesc;
var startTime = req.body.startTime;
var endTime = req.body.endTime;
var isDelete = 0;
const addUserSql = "insert into dream(id,userId,dreamTitle,dreamDesc,startTime,endTime,isDelete) values(?,?,?,?,?,?,?)";
var addUserData = [0,userId,dreamTitle,dreamDesc,startTime,endTime,isDelete];
connection.query(addUserSql,addUserData,function(err,result){
if(err){
console.log(err)
res.render("插入失败"+err.message);
}else {
res.send({
code: '0',
messages: '添加成功',
data: null
});
}
});
});
router.get('/getDreamData', function(req, res, next) {
if(req.query.id){
connection.query("select * from dream where userId ='"+req.query.id+"' and isDelete=0;",function(err,result){
console.log(err)
if(err){
res.render("查找失败"+err.message);
return
}else{
if(result){
res.send({
code: '0',
messages: '处理成功',
data: result
});
}
}
})
}
});
router.post('/deleteDreamData', function(req, res, next) {
if(!req.body.id || !req.body.userId){
res.send({
code: '0',
messages: '参数不完整',
data: null
});
return
}else{
connection.query("delete from dream where userId ='"+req.body.userId+"'and id='"+req.body.id+"';",function(err,result){
if(err){
res.render("查找失败"+err.message);
return
}else{
console.log(result)
if(result){
res.send({
code: '0',
messages: '处理成功',
data: null
});
}
}
})
}
});
router.post('/completeDreamData', function(req, res, next) {
if(!req.body.id || !req.body.userId){
res.send({
code: '0',
messages: '参数不完整',
data: null
});
return
}else{
connection.query("update dream set isDelete=1 where userId ='"+req.body.userId+"'and id='"+req.body.id+"';",function(err,result){
console.log(err)
if(err){
res.render("查找失败"+err.message);
return
}else{
if(result){
res.send({
code: '0',
messages: '处理成功',
data: result
});
}
}
})
}
});
router.get('/getCompleteDreamData', function(req, res, next) {
if(req.query.id){
connection.query("select * from dream where userId ='"+req.query.id+"' and isDelete=1;",function(err,result){
console.log(err)
if(err){
res.render("查找失败"+err.message);
return
}else{
if(result){
res.send({
code: '0',
messages: '处理成功',
data: result
});
}
}
})
}
});
module.exports = router;
小程序+node+mysql做的小项目的更多相关文章
- 记录一次用宝塔部署微信小程序Node.js后端接口代码的详细过程
一直忙着写毕设,上一次写博客还是元旦,大半年过去了.... 后面会不断分享各种新项目的源码与技术.欢迎关注一起学习哈! 记录一次部署微信小程序Node.js后端接口代码的详细过程,使用宝塔来部署. 我 ...
- 基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发
基于spring-boot的社区社交微信小程序,适合做脚手架.二次开发 代码地址如下:http://www.demodashi.com/demo/13867.html 1 概述 笔者做的一个后端基于s ...
- 微信小程序来了,小程序都能做些什么
2017年的微信大动作就是微信小程序了,到底小程序都能做些什么?这是很多人关注的热点,小程序开发对企业又有什么帮助呢?下面让厦门微信小程序开发公司来为你就分析下. 微信小程序与APP的关系 ...
- 微信小程序 (node) warning: possible EventEmitter memory leak detected
小程序 (node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setM ...
- 微信小程序 springboot nginx 做图片存储 上传 浏览
微信小程序前端-springboot后端-nginx图片存储 前言 本人小白一名,这是第一次学习微信小程序,特此做个记录. 首先准备nginx做图片存储 选择一个地址存放图片 #我的地址 [root@ ...
- 微信小程序之微信登陆 —— 微信小程序教程系列(20)
简介: 微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆.只不过是,还没有写入到咱们自 ...
- 微信小程序开发——前端如何区分小程序运行环境
前言: 之前用vue做h5项目,对于接口请求,都是根据前端访问域名来判断运行环境,然后自动适配对应的服务器地址的.这样的好处就是在开发.测试及发布上线全程都不需要手动去改接口请求地址,只要提前配置好就 ...
- 微信小程序——【百景游戏小攻略】
微信小程序--[百景游戏小攻略] 本次课程小项目中的图片以及文章还未获得授权!请勿商用!未经授权,请勿转载! 博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE ...
- 微信小程序全选,微信小程序checkbox,微信小程序购物车
微信小程序,这里实现微信小程序checkbox,有需要此功能的朋友可以参考下. 摘要: 加减商品数量,汇总价格,全选与全不选 设计思路: 一.从网络上传入以下Json数据格式的数组 1.标题titl ...
随机推荐
- Zabbix监控磁盘IO值
iostat取硬盘IO值. iostat -x 3 2 | grep vdb | sed -n '2p' | awk '{print $14}' 每3s取一次值,输出第二次vdb硬盘的负载值. 添加Z ...
- 函数内部还是不要使用 strtok()
今天在调试程序的时候,遇到一个奇怪的事情,一开始担心是代码存在内存溢出引起的,花了半个小时没找到原因. 在吃饭的时候,突然想起可能是 strtok() 引起的,查找调用的函数,果然发现在函数中使用了 ...
- 什么是Annotation
Annotation 被称为注解,在Java开发中是相当常见的,通过注解,我们可以简化代码提高开发效率.例如Override Annotation,这个应该算是在开发过程中使用最多的注解了.注解(An ...
- STL迭代器iterator
一:迭代器原理 迭代器是一个“可遍历STL容器内全部或部分元素”的对象. 迭代器指出容器中的一个特定位置. 迭代器就如同一个指针. 迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范 ...
- Jmeter 逻辑控制器总结
本文主要总结Jmeter的逻辑控制器: 逻辑控制器下一共16个控制器: 1.foreach controller循环控制器 定义变量数组,按数组遍历循环 2.simple controller 简 ...
- GIT-windows系统部署gitblit服务器
windows系统部署 gitblit 服务器 1. 安装JAVA环境 下载Java,下载地址:http://www.java.com/zh_CN/ 安装Java.安装步骤不再详述. 配置J ...
- QPS从0到4000请求每秒,谈达达后台架构演化之路
达达是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题(目前达达已经与京东到家合并). 达达业务主要包含 ...
- GDB调试技巧:总结篇
目录 一 写在开头 1.1 本文内容 二 学习资料 三 常用命令 四 调试技巧 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 写在开头 1.1 本文内容 总结GDB调试的一些常用命令和调试 ...
- ES6.3.2 副本失败处理
ES6.3.2 副本失败处理 副本的失败处理对理解ES的数据副本模型很有帮助.在ES6.3.2 index操作源码流程的总结中提到:ES的写操作会先写主分片,然后主分片再将操作同步到副本分片.本文给出 ...
- 五十四、linux 编程——TCP 编程模型
54.1 编程模型介绍 54.1.1 TCP 客户端服务器编程模型 客户端调用序列 调用 socket 函数创建套接字 调用 connect 连接服务器端 调用 I/O 函数(read/write) ...