代码拉取完成,页面将自动刷新
const express = require('express')
const bodyParser = require('body-parser')
const request = require('request');
const { response, json} = require('express');
const axios = require('axios')
const app = express()
//导入 mysql 模块
const mysql = require('mysql')
app.use(bodyParser.json())
// 配置中间件 `express.urlencoded`解析表单以post方式提交过来的数据
//(在所有路由之前设置)
app.use(express.urlencoded({
extended: false
}))
// let appId = 'wx9944290efa8f947d' // 填写用户自己的appid
// let appSecret = '5b127b804fb1d94f6378cf359d923c66' // 填写用户自己的密钥
//创建数据库连接对象
const db = mysql.createPool({
host: '127.0.0.1',//主机地址
user: 'root',//用户名
password: 'admin123',//密码
database: 'my_db_01',//数据库名
})
// 用户信息
var user = {
appid: 'wx9944290efa8f947d', // 填写你自己的appid ( 微信公众平台获取 )
secret: '5b127b804fb1d94f6378cf359d923c66', // 填写你自己的appsecret密钥 ( 微信公众平台获取 )
openid: '',
access_token:''
}
// 模板ID - template_id
const temp_id = 'oYPdK7Qj6ZB1vx4iKViOJobV25VL_ktBb3D7wbFY-0A' // 填写你申请选用的模板id
// 获取Openid请求接口
app.post('/getOpenId', (req, res) => {
const { code } = req.body;
const appid = 'wx9944290efa8f947d';
const secret = '5b127b804fb1d94f6378cf359d923c66';
const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`;
request(url, (error, response, body) => {
if (!error && response.statusCode == 200) {
const data = JSON.parse(body);
const openId = data.openid;
user.openid = data.openid;
console.log('用户openId:',data.openid);
// console.log('用户user.openId:',data.openid);
// res.json({ openId: openId });
res.json({ openId });
} else {
res.status(500).json({ message: '获取openId失败' });
}
});
});
// 接收前端传来的openId、模板消息ID和数据,发送模板消息
app.post('/sendTemplateMessage', (req, res) => {
const { openId, templateId, data } = req.body;
//获取access_token
// 调用函数获取access_token
getAccessToken()
.then((access_token) => {
console.log('Access Token:', access_token);
// console.log('Access Token:', { openId, templateId, data });
// console.log('openId:', openId);
const accessToken = 'access_token'; // 微信接口访问凭证
const urls = `https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=${accessToken}`;
const messageData = {
touser: openId,
template_id: templateId,
data: data,
"miniprogram_state": "developer",
"lang": "zh_CN"
};
// console.log('messageData:', messageData);
// 发送模板消息给用户
request({
url: urls,
method: 'POST',
json: true,
body: messageData
}, (error, response, body) => {
if (!error && response.statusCode == 200) {
res.json({ message: '模板消息发送成功' });
console.log('ok')
} else {
res.status(500).json({ message: '模板消息发送失败' });
}
});
})
.catch((error) => {
console.error('Failed to get access token:', error);
});
//
});
// 定义函数从微信服务器获取access_token
function getAccessToken() {
const appid = 'wx9944290efa8f947d'; // 替换为您的微信小程序AppID
const secret = '5b127b804fb1d94f6378cf359d923c66'; // 替换为您的微信小程序AppSecret
const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`;
return new Promise((resolve, reject) => {
request(url, (error, response, body) => {
if (!error && response.statusCode == 200) {
const data = JSON.parse(body);
const access_token = data.access_token;
resolve(access_token);
} else {
reject(error);
}
});
});
}
var wmydb = {
user:{}, // userInfo
session:{}, // 保存openid和session_key
nickName:{}, //昵称
avatarUrl:{}, //头像
openid:{}
}
// 响应前端登入请求
app.post('/login',(req,res)=>{
// 测试获取code
// console.log('code:'+req.body.code);
wmydb.nickName = req.body.nickName;
wmydb.avatarUrl = req.body.avatarUrl;
console.log('codeaa:',wmydb.avatarUrl);
// 第一步:定义对象存储appid和secret
const wmy ={
appid:'wx9944290efa8f947d', // 填写自己的appid
secret:'5b127b804fb1d94f6378cf359d923c66' // 填写自己的appsecret(在wx开发管理中生成)
}
// 第二步:定义发送请求url,将appid、secret、code设置成动态数据
let url = 'http://api.weixin.qq.com/sns/jscode2session?appid=' +wmy.appid+ '&secret='+wmy.secret+'&js_code='+req.body.code+'&grant_type=authorization_code';
// 第三步: 发送请求
request(url,(err,response,body)=>{
// 发送请求后获取到 session_key(会话信息)、openid(用户标识)
// console.log('body:'+body);
// 获取回来的body内容是字符串数据,通过JSON.parse()转换成js对象
var sessionbody = JSON.parse(body);
// console.log(sessionbody);
console.log('bf',sessionbody.openid);//获取到openid
// 第四步:判断是否获取到openid
if(sessionbody.openid){
// 存在则使用加密方法生成token(这里使用时间戳法加密,一般使用JWT)
console.log('insert');
var token = 'token'+new Date().getTime()
// 将openid和secret赋值给token,再将token存储到假设的wmydb.session属性中
wmydb.session[token] = sessionbody;
wmydb.openid = sessionbody.openid;
/*
此时数据库内部结构为:
db={
user:{},
session:{
token_时间戳:{session_key:'xxx',openid:'xxx'}
}
}
*/
// 第五步:上面步骤完成后,判断用户是否为第一次登入(第一次登录没有openid,经过这次登录后才生成openid),并设置一个用于响应登录的状态
if(!wmydb.user[sessionbody.openid]){
wmydb.user[sessionbody.openid]={state:1};
console.log('insert');
//录入用户信息
const sql = "INSERT INTO ev_users(openid,username,user_pic) VALUES (?,?,?)";
db.query(sql, [wmydb.openid,wmydb.nickName,wmydb.avatarUrl], function (err, data) {
if (err) {
console.log(err)
res.end('error')
} else {
console.log('nihao')
var result = {
"status": "200",
"message": 'success',
}
res.end(JSON.stringify(result))
}
});
/*
此时数据库数据结构为:
db={
user:{
sessionbody.openid:{state:1}
},
session:{
token_时间戳:{session_key:'xxx',openid:'xxx'}
}
}
*/
// console.log(wmydb);
// console.log(token);
// 将token返回给前端
res.json({
token:token
})
}
}
})
})
// 验证token接口
app.get('/checklogin',(req,res)=>{
var session = wmydb.session[req.query.token];
console.log('checklogin:',session);
res.json({
is_login: session !== undefined
})
})
//***** 查找所有任务 */
app.get("/getNotes",function(req, res){
// console.log(req.query);
// console.log('aa',wmydb.openId);
const open_id = req.query.open_id
// console.log(open_id);
var sql = 'select * from notes where user_openid = ?';
db.query(sql ,open_id,function(err,data){
if (err){
console.log(err);
}else{
var result = {
"status":"200",
"message":"success",
}
result.data = data;
res.end(JSON.stringify(result));
}
})
// } else {
// res.status(500).json({ message: '获取任务失败' });
// }
})
//*******增加任务
// 利用postman 传递的数据 名要与数据库中字段一致
// 向数据库中增加数据行 发送post请求
app.post('/dataAdd', (req, res) => {
//通过`req.body`来获取客户端提交过来的数据
const data = req.body
console.log(data)
// 构建sql语句 ?表示占位符
// const sql = 'insert into notes set ?'
const sql = "INSERT INTO notes(title,content,category,created_date,created_time,end_date,end_time,user_openid) VALUES (?,?,?,?,?,?,?,?)"
// data是数组形式 传递数据
// [notes.title,notes.content,notes.category,notes.created_at,notes.end_at]
db.query(sql, [data.title,data.content,data.category,data.created_date,data.created_time,data.end_date,data.end_time,data.user_openid], (err, data) => {
// 判断sql是否连接成功
if (err) return console.log(err.message);
//判断受影响的行数 (affectedRows) 看其值是不是1 不为1则写入失败
if (data.affectedRows !== 1) return console.log('写入数据失败');
// 如果成功 响应给客户端
res.send({
status: 0,
msg: '数据写入成功',
})
})
})
//根据id 修改数据库中的数据 post请求
app.post('/updata', (req, res) => {
// 接收客户端响应的数据
const data = req.body
// 构建sql语句
const sql = 'UPDATE notes SET title=?,content=? WHERE note_id=?'
// 调用bd.query 指定要执行的sql语句
db.query(sql, [data.title,data.content,data.note_id], (err, data) => {
// err为对象是 sql语句执行失败
if (err) return console.log(err.message);
// data.affectedRows !== 1 表示 没有被修改的行
if (data.affectedRows !== 1) return console.log('更新数据失败');
// 更新成功
res.send({
status: 0,
msg: '更新成功'
})
})
})
//*******删除任务
// 定义删除数据的接口
app.delete('/data/:title', (req, res) => {
const title = req.params.title;
// 构建SQL语句,实现根据title删除数据的功能
const sql = `DELETE FROM notes WHERE title = ?`;
// 执行SQL语句
db.query(sql, [title], (error, results) => {
if (error) {
res.status(500).json({ message: '删除数据时出错' });
} else {
res.json({ message: '数据删除成功' });
}
});
});
//启动服务器,监听3000端口
app.listen(3000, () => {
console.log('server running | http://127.0.0.1:3000')
})
//向外共享 db 数据库连接对象
module.exports = db
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。