Nodejs+MySQL+Express+微信小程序

Express+nodejs+mysql+微信小程序

前端

这次主要是学习前后端交互等功能,对前端界面要求不多,仅一个按钮。
在这里插入图片描述

按钮绑定的事件名称为login,下面看一下js代码:

// index.js
Page({
    data: {
        UserInfo: {}
    },
    login() {
        console.log("点击登录");
        wx.getUserProfile({
            desc: 'desc',
            lang: "zh_CN",
            success: (result) => {
                console.log(result.userInfo);
                this.setData({
                    UserInfo: result.userInfo
                })
                wx.login({
                    success: (result) => {
                        wx.request({
                            url: 'http://127.0.0.1:3000/login',
                            method: "GET",
                            data: {
                                code: result.code
                            },
                            success: (result) => {
                                console.log(result)
                                wx.request({
                                    url: 'http://127.0.0.1:3000/login/postUserInfo',
                                    data: this.data.UserInfo,
                                    method: 'POST',
                                    success: (result) => {
                                        console.log("上传成功");
                                    }
                                })
                            }
                        })
                    }
                })
            }
        })

    }
})

代码还是很容易理解的,可以直接看微信官方文档相关内容,这里不在赘述。

后端

package的配置和依赖

{
  "name": "tougao",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www",
    "devstart": "nodemon ./bin/www"
  },
  "dependencies": {
    "body-parser": "^1.20.0",
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "jade": "~1.11.0",
    "morgan": "~1.9.1",
    "mysql": "^2.18.1",
    "request": "^2.88.2"
  },
  "devDependencies": {
    "nodemon": "^2.0.16"
  }
}

先看一下依赖文件

  • nodemon:服务器自动刷新功能
  • body-parse:处理POST请求
  • request:像其他服务器发送请求
  • express:WEB框架
  • mysql:数据库

再看脚本文件

​ 值得注意的就一个devstart,主要是用来进行nodemon自动刷新的

app.js文件

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var bodyParser = require('body-parser')

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var loginRouter = require('./routes/login')

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/login',loginRouter)

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

其中自己添加的代码如下:

var bodyParser = require('body-parser')

var loginRouter = require('./routes/login')

app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

app.use('/login',loginRouter)

作用也很明显,分别为导入插件、导入路由、使用插件和路由。

其中就一个login路由。

路由login的设置

var express = require('express');
var bodyParser = require('body-parser')
var request = require('request');
var router = express.Router();

var user_data_control=require('../db_control/user_data_control')
var app_id = "你的id"
var app_secret = "你的secret"
var base_url = 'https://api.weixin.qq.com/sns/jscode2session'
var userid;	
	
/* GET users listing. */
router.get('/', function(req, res, next) {
	var code = req.query.code

	var url = base_url + '?appid=' + app_id + '&secret=' + app_secret + '&js_code=' + code +"&grant_type=authorization_code"
	request(url, (error, response, body) => {
		console.log('statusCode:', response && response.statusCode)
		var thebody=JSON.parse(body)
		console.log(thebody);
		userid=thebody.openid
		res.end(body)
	})

});

router.post('/postUserInfo', function(req, res, next){
	var userdata={
		UnionId:userid,
		name:req.body.nickName,
		avatar:req.body.avatarUrl
	}
	console.log(userdata);

	user_data_control.add_data(userdata);
	
})

module.exports = router;

代码主要分为四个部分:

  1. 导入组件
  2. 设置全局变量
  3. 监听GET请求:获取用户UNIONID
  4. 监听POST请求:上传用户数据,并保存在数据库中

代码也简介明了。

数据库API的设置

const mysql = require('mysql')
//创建连接
const conn = mysql.createConnection({
	host: 'localhost',
	port: 3306,
	user: 'root',
	password: '你的密码',
	database: '你的数据库'
})
//连接mysql
conn.connect((err) => {
	if (err) {
		console.log(err)
		return;
	}
	console.log('数据库链接成功!')
})


function add_data(userData){
	var  addSql = 'INSERT INTO userInfo(UnionId,name,avatar) VALUES(?,?,?)';
	var  addSqlParams = [userData.UnionId,userData.name,userData.avatar];

	console.log(addSqlParams);
	conn.query(addSql,addSqlParams,(err,res)=>{
		if(err){
			console.log(err.message);
			return;
		}
		console.log('INSERT OK!'+res);
	})
	conn.end();
}

 

module.exports={
	add_data
}

这是自己新学习到的,分别是数据库的连接、通过语句进行操作。

总结

微信小程序向后端发送请求后,后端直接处理请求即可。# Express前后端开发

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
实现登录功能需要以下步骤: 1. 创建一个小程序,包括登录页面和后台 API 接口。 2. 在小程序使用 `wx.login()` 获取用户临时登录凭证 code,并将其发送到后台 API 接口。 3. 后台 API 接口使用 `code` 和小程序开发者密钥 `appid`、`secret` 调用微信提供的 API 接口获取用户的 `openid` 和 `session_key`。 4. 将获取到的 `openid` 保存到 MySQL 数据库,并生成一个随机的 `token`,将其返回给小程序。 5. 小程序将 `token` 保存到本地,以后每次请求后台 API 接口时,都需要在请求头带上 `token`。 6. 后台 API 接口在接收到请求时,从请求头获取 `token`,并在 MySQL 数据库查找对应的 `openid`,如果存在则说明用户已登录,否则返回未登录错误信息。 下面是具体的实现步骤: 小程序端代码: ```javascript // login.js Page({ login: function() { wx.login({ success: res => { wx.request({ url: 'http://localhost:3000/login', method: 'POST', data: { code: res.code }, success: res => { // 将token保存到本地 wx.setStorageSync('token', res.data.token) } }) } }) } }) // index.js Page({ onLoad: function() { wx.request({ url: 'http://localhost:3000/user', header: { 'token': wx.getStorageSync('token') }, success: res => { console.log(res.data) } }) } }) ``` 后台 API 接口代码: ```javascript const express = require('express') const app = express() const mysql = require('mysql') const request = require('request') // 创建 MySQL 连接池 const pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'test' }) // 登录接口 app.post('/login', (req, res) => { const code = req.body.code const appid = 'your appid' const secret = 'your secret' // 调用微信 API 获取 openid 和 session_key request(`https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`, (err, response, body) => { const { openid, session_key } = JSON.parse(body) // 生成一个随机 token const token = Math.random().toString(36).substr(2) // 将 openid 和 token 保存到 MySQL 数据库 pool.query('INSERT INTO user SET ?', { openid, token }, (err, result) => { if (err) throw err res.send({ token }) }) }) }) // 用户信息接口 app.get('/user', (req, res) => { const token = req.headers.token // 在 MySQL 数据库查找对应的 openid pool.query('SELECT openid FROM user WHERE token = ?', [token], (err, result) => { if (err) throw err if (result.length === 0) { res.status(401).send('Unauthorized') } else { // 如果存在对应的 openid,则说明用户已登录 res.send('User Info') } }) }) app.listen(3000, () => console.log('Server started')) ``` 以上代码仅为示例,实际项目需要根据具体需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

申也.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值