使用 Node.js 和 MySQL 实现微信小程序的用户注册、登录及数据可视化

📌 前言

随着移动互联网的发展,微信小程序因其便捷性和高效性受到了广泛欢迎。本教程将带你从零开始,利用 Node.jsMySQL 构建一个完整的微信小程序后台服务,实现用户注册、登录以及数据可视化功能。


🧩 技术栈

  • Node.js:用于构建后端服务
  • Express:轻量级框架,简化了路由和中间件管理
  • MySQL:关系型数据库管理系统
  • ECharts:用于数据可视化展示
  • 微信小程序:作为前端展示平台

🛠️ 环境准备

✅ 安装 Node.js 和 MySQL

确保你已经安装了以下环境:

  • Node.js (建议版本 v14+)
  • MySQL (建议版本 5.7+)

可以通过命令行验证是否安装成功:

css 复制代码
Bash
深色版本
node -v
npm -v
mysql --version

💾 数据库设计

根据需求文档要求,我们需要创建两个表:

  1. users 表用于存储用户注册信息。
  2. tool 表用于存储数据可视化所需的数据。
sql 复制代码
Sql
深色版本
CREATE DATABASE IF NOT EXISTS weapp_db CHARACTER SET utf8 COLLATE utf8_general_ci;

USE weapp_db;

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
);

CREATE TABLE IF NOT EXISTS tool (
    id INT PRIMARY KEY,
    content_field VARCHAR(255) NOT NULL,
    data_value_field VARCHAR(255) NOT NULL
);

-- 插入测试数据到 tool 表
INSERT INTO tool (id, content_field, data_value_field) VALUES 
(1, '内容1', '值1'),
(2, '内容2', '值2'),
(3, '内容3', '值3'),
(4, '内容4', '值4');

📦 后端服务搭建

✅ 初始化项目

首先,在你的工作目录下初始化一个新的 Node.js 项目,并安装必要的依赖包:

bash 复制代码
Bash
深色版本
mkdir weapp_backend && cd weapp_backend
npm init -y
npm install express mysql2 cors body-parser

✅ 创建 server.js 文件

在项目根目录下创建一个名为 server.js 的文件,编写如下代码:

javascript 复制代码
Js
深色版本
const express = require('express');
const mysql = require('mysql2');
const cors = require('cors');
const bodyParser = require('body-parser');

// 创建连接池
const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'your_password', // 替换为你的MySQL root密码
    database: 'weapp_db'
});

const app = express();
app.use(bodyParser.json());
app.use(cors());

// 用户注册接口
app.post('/register', (req, res) => {
    const { username, password } = req.body;
    pool.query(
        'INSERT INTO users (username, password) VALUES (?, ?)',
        [username, password],
        (err, results) => {
            if (err) return res.status(500).json({ error: err.message });
            res.json({ message: '注册成功' });
        }
    );
});

// 用户登录接口
app.post('/login', (req, res) => {
    const { username, password } = req.body;
    pool.query(
        'SELECT * FROM users WHERE username = ? AND password = ?',
        [username, password],
        (err, results) => {
            if (err) return res.status(500).json({ error: err.message });
            if (results.length > 0) {
                res.json({ message: '登录成功', user: results[0] });
            } else {
                res.status(401).json({ message: '用户名或密码错误' });
            }
        }
    );
});

// 数据可视化接口
app.get('/data', (req, res) => {
    pool.query(
        'SELECT * FROM tool',
        (err, results) => {
            if (err) return res.status(500).json({ error: err.message });
            res.json(results);
        }
    );
});

// 监听端口
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});

📱 微信小程序前端开发

✅ 注册页面示例

在微信小程序中,你可以通过调用 wx.request 来与后端进行交互。以下是简单的注册页面示例代码:

javascript 复制代码
Js
深色版本
Page({
    data: {
        username: '',
        password: ''
    },
    handleRegister() {
        const { username, password } = this.data;
        wx.request({
            url: 'http://localhost:3000/register',
            method: 'POST',
            data: { username, password },
            success(res) {
                console.log('注册结果:', res.data);
                if (res.data.message === '注册成功') {
                    wx.showToast({
                        title: '注册成功',
                        icon: 'success'
                    });
                }
            },
            fail(err) {
                console.error('注册失败:', err);
            }
        });
    }
});

✅ 登录页面示例

javascript 复制代码
Js
深色版本
Page({
    data: {
        username: '',
        password: ''
    },
    handleLogin() {
        const { username, password } = this.data;
        wx.request({
            url: 'http://localhost:3000/login',
            method: 'POST',
            data: { username, password },
            success(res) {
                console.log('登录结果:', res.data);
                if (res.data.message === '登录成功') {
                    wx.navigateTo({
                        url: '/pages/home/home'
                    });
                } else {
                    wx.showToast({
                        title: '用户名或密码错误',
                        icon: 'none'
                    });
                }
            },
            fail(err) {
                console.error('登录失败:', err);
            }
        });
    }
});

✅ 数据可视化页面示例

你可以使用 ECharts 进行数据可视化展示:

xml 复制代码
Html
深色版本
<view>
    <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
css 复制代码
Js
深色版本
import * as echarts from '../../components/ec-canvas/echarts';

let chart = null;

function initChart(canvas, width, height, dpr) {
    chart = echarts.init(canvas, null, {
        width: width,
        height: height,
        devicePixelRatio: dpr // new
    });
    canvas.setChart(chart);

    wx.request({
        url: 'http://localhost:3000/data',
        success(res) {
            const data = res.data.map(item => ({
                name: item.content_field,
                value: item.data_value_field
            }));
            const option = {
                title: {
                    text: '数据可视化',
                    left: 'center'
                },
                tooltip: {
                    trigger: 'item'
                },
                legend: {
                    orient: 'vertical',
                    left: 'left'
                },
                series: [
                    {
                        name: '访问来源',
                        type: 'pie',
                        radius: '50%',
                        data: data,
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            };
            chart.setOption(option);
        }
    });

    return chart;
}

Page({
    data: {
        ec: {
            onInit: initChart
        }
    }
});

🚀 总结

通过这篇教程,我们学习了如何使用 Node.js 和 MySQL 搭建一个支持用户注册、登录及数据可视化的微信小程序后台服务。这个过程不仅涵盖了基本的 CRUD 操作,还包括了前后端交互的最佳实践。

希望本文能帮助你在实际项目中更好地应用这些技术。如果你有任何疑问或需要进一步的帮助,请随时留言讨论!

相关推荐
啾啾Fun33 分钟前
精粹汇总:大厂编程规范(持续更新)
后端·规范
yt9483242 分钟前
lua读取请求体
后端·python·flask
IT_10241 小时前
springboot从零入门之接口测试!
java·开发语言·spring boot·后端·spring·lua
汪子熙1 小时前
在 Word 里编写 Visual Basic 调用 DeepSeek API
后端·算法·架构
寻月隐君2 小时前
手把手教你用 Solana Token-2022 创建支持元数据的区块链代币
后端·web3·github
代码丰2 小时前
使用Spring Cloud Stream 模拟生产者消费者group destination的介绍(整合rabbitMQ)
java·分布式·后端·rabbitmq
烛阴3 小时前
Cheerio DOM操作深度指南:轻松玩转HTML元素操作
前端·javascript·后端
Hello.Reader3 小时前
在多云环境透析连接ngx_stream_proxy_protocol_vendor_module
后端·python·flask
西洼工作室4 小时前
Spring Boot常用依赖大全:从入门到精通
java·spring boot·后端
北i4 小时前
IOT集群扩容实践:问题剖析与解决策略
后端·物联网·kafka