IT评测·应用市场-qidao123.com

标题: 微信小程序通过Node.js连接本地Mysql,实现数据的增删改查 [打印本页]

作者: 渣渣兔    时间: 2024-11-17 10:14
标题: 微信小程序通过Node.js连接本地Mysql,实现数据的增删改查
一、环境准备

确保在本地安装了Node.js和MySQL数据库
我的版本为:
Node.js v20.18.0.
Mysql version: 8.0.39
二、创建数据库和表

这里是测试,所以创建的数据库比较简朴。
打开Navicat ,右键连接-->下令列界面,输入以下sql语句,回车
  1. CREATE DATABASE members_db;
  2. USE members_db;
  3. CREATE TABLE members (
  4.    id INT AUTO_INCREMENT PRIMARY KEY,
  5.    name VARCHAR(100) NOT NULL,
  6.    age INT NOT NULL
  7. );
复制代码
可以看到创建了一个名为members_db的数据库,下面有一个名为member的表:

三、创建 Node.js 后端

在恣意位置创建一个文件夹,定名随意,但是要记得位置

右键Node.js command prompt,选择以管理员身份运行

cd进入刚刚创建的文件夹:

输入以下下令,创建新的 Node.js 项目:
  1. mkdir member-management
  2. cd member-management
  3. npm init -y
复制代码

输入以下下令,安装所需的库,包括 express 和 mysql:
  1. npm install express mysql body-parser cors
复制代码

这个时候可以看到,刚刚创建的文件夹下面多了一些文件:

在此新建一个文件,名为:server.js,不会创建的可以先新建txt文件,再改拓展名为.js

打开server.js,复制以下代码(注意修改数据库用户名和密码!!!):
  1. const express = require('express');
  2. const mysql = require('mysql');
  3. const bodyParser = require('body-parser');
  4. const cors = require('cors');
  5. const app = express();
  6. const port = 3000;
  7. app.use(cors());
  8. app.use(bodyParser.json());
  9. const db = mysql.createConnection({
  10.    host: 'localhost',
  11.    user: 'root', // 修改为你的数据库用户名
  12.    password: 'password', // 修改为你的数据库密码
  13.    database: 'members_db'
  14. });
  15. db.connect(err => {
  16.    if (err) {
  17.        console.error('Database connection failed: ' + err.stack);
  18.        return;
  19.    }
  20.    console.log('Connected to database.');
  21. });
  22. // 增加成员
  23. app.post('/members', (req, res) => {
  24.    const { name, age } = req.body;
  25.    db.query('INSERT INTO members (name, age) VALUES (?, ?)', [name, age], (err, result) => {
  26.        if (err) throw err;
  27.        res.send({ id: result.insertId, name, age });
  28.    });
  29. });
  30. // 获取所有成员
  31. app.get('/members', (req, res) => {
  32.    db.query('SELECT * FROM members', (err, results) => {
  33.        if (err) throw err;
  34.        res.send(results);
  35.    });
  36. });
  37. // 更新成员
  38. app.put('/members/:id', (req, res) => {
  39.    const { id } = req.params;
  40.    const { name, age } = req.body;
  41.    db.query('UPDATE members SET name = ?, age = ? WHERE id = ?', [name, age, id], (err, result) => {
  42.        if (err) throw err;
  43.        res.send({ id, name, age });
  44.    });
  45. });
  46. // 删除成员
  47. app.delete('/members/:id', (req, res) => {
  48.    const { id } = req.params;
  49.    db.query('DELETE FROM members WHERE id = ?', [id], (err, result) => {
  50.        if (err) throw err;
  51.        res.send({ id });
  52.    });
  53. });
  54. app.listen(port, () => {
  55.    console.log(`Server running at http://localhost:${port}`);
  56. });
复制代码
在刚刚的终端输入node server.js,启动服务器:
  1. node server.js
复制代码

显示Connected to database就是乐成了。可以在浏览器输入下面的地址来验证,如果能进行跳转就是连接数据库乐成了
  1. http://10.105.0.236:3000/members
复制代码

(由于数据库是空的,所以没有数据)
四、创建微信小程序

微信小程序的项目布局如下:
  1. /miniproject
  2.   ├── /pages
  3.   │   └── index
  4.   │       ├── index.js
  5.   │       ├── index.wxml
  6.   │       ├── index.wxss
  7.   └── app.js
  8.   └── app.json
  9.   └── app.wxss
复制代码
pages/index/index.js

  1. Page({
  2.    data: {
  3.        members: [],
  4.        name: '',
  5.        age: ''
  6.    },
  7.    onLoad: function () {
  8.        this.getMembers();
  9.    },
  10.    
  11.    getMembers: function () {
  12.        wx.request({
  13.            url: 'http://localhost:3000/members',
  14.            method: 'GET',
  15.            success: (res) => {
  16.                this.setData({ members: res.data });
  17.            },
  18.            fail: (err) => {
  19.                console.error(err);
  20.            }
  21.        });
  22.    },
  23.    addMember: function () {
  24.        const { name, age } = this.data;
  25.        if (!name || !age) {
  26.            wx.showToast({ title: '请填写成员信息', icon: 'none' });
  27.            return;
  28.        }
  29.        wx.request({
  30.            url: 'http://localhost:3000/members',
  31.            method: 'POST',
  32.            data: { name, age: parseInt(age) },
  33.            success: () => {
  34.                this.getMembers();
  35.                this.setData({ name: '', age: '' }); // 清空输入
  36.            },
  37.            fail: (err) => {
  38.                console.error(err);
  39.            }
  40.        });
  41.    },
  42.    deleteMember: function (event) {
  43.        const { id } = event.currentTarget.dataset;
  44.        wx.request({
  45.            url: `http://localhost:3000/members/${id}`,
  46.            method: 'DELETE',
  47.            success: () => {
  48.                this.getMembers();
  49.            },
  50.            fail: (err) => {
  51.                console.error(err);
  52.            }
  53.        });
  54.    },
  55.    bindNameInput: function (event) {
  56.        this.setData({ name: event.detail.value });
  57.    },
  58.    
  59.    bindAgeInput: function (event) {
  60.        this.setData({ age: event.detail.value });
  61.    }
  62. });
复制代码
pages/index/index.wxml

  1. <view class="container">
  2.     <view class="input-area">
  3.         <input placeholder="姓名" bindinput="bindNameInput" value="{{name}}" />
  4.         <input placeholder="年龄" bindinput="bindAgeInput" value="{{age}}" type="number" />
  5.         <button bindtap="addMember">添加成员</button>
  6.     </view>
  7.     <view class="member-list">
  8.         <view wx:for="{{members}}" wx:key="id" class="member-item">
  9.             <text>{{item.name}} - {{item.age}}岁</text>
  10.             <button data-id="{{item.id}}" bindtap="deleteMember">删除</button>
  11.         </view>
  12.     </view>
  13. </view>
复制代码
pages/index/index.wxss

  1. .container {
  2.     padding: 20px;
  3. }
  4. .input-area {
  5.     margin-bottom: 20px;
  6. }
  7. .input-area input {
  8.     margin-right: 10px;
  9.     padding: 5px;
  10. }
  11. .member-list {
  12.     margin-top: 20px;
  13. }
  14. .member-item {
  15.     display: flex;
  16.     justify-content: space-between;
  17.     margin: 5px 0;
  18.     padding: 10px;
  19.     border: 1px solid #ccc;
  20. }
复制代码
点击编译:

输入数据,点击添加成员:

可以看到小程序前端乐成渲染出刚刚的数据:

革新数据库,看到刚刚输入的数据已经添加进去了:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4