连接本地MySQL数据库的微信小程序开发实践
引言
微信小程序是一种轻量级的应用程序,可以在微信客户端内被用户直接使用,具有快速、便捷的特点。在开发过程中,经常需要与后端数据库进行交互来存取数据。本文将介绍如何在微信小程序中连接本地MySQL数据库,并提供一个实际问题的解决方案。
准备工作
在开始之前,需要完成以下准备工作:
- 确保已经安装了微信小程序开发环境,包括微信开发者工具和微信开发文档。
- 在本地安装MySQL数据库,并创建一个用于测试的数据库。
连接本地MySQL数据库
1. 在小程序中配置请求域名
打开微信开发者工具,在项目设置中找到“请求合法域名”,并添加本地MySQL数据库所在的域名或IP地址。
2. 创建服务器端API
在本地开发一个简单的服务器端API,用于处理小程序发送的请求,并连接本地MySQL数据库进行数据操作。以下是一个使用Node.js和Express框架的示例:
const express = require('express');
const mysql = require('mysql');
const app = express();
const port = 3000;
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test'
});
app.get('/api/data', (req, res) => {
connection.query('SELECT * FROM table_name', (error, results) => {
if (error) {
throw error;
}
res.json(results);
});
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
3. 在小程序中发送请求
在小程序中使用wx.request方法发送GET请求至服务器端API,并处理返回的数据。以下是一个使用Promise封装的示例:
const fetchData = () => {
return new Promise((resolve, reject) => {
wx.request({
url: 'http://localhost:3000/api/data',
method: 'GET',
success: (res) => {
resolve(res.data);
},
fail: (err) => {
reject(err);
}
});
});
};
实际问题解决方案
假设我们需要在微信小程序中展示一个学生列表,并能够根据学生姓名进行搜索。下面是一个解决方案的示例代码:
数据库结构
首先,我们需要在MySQL数据库中创建一个名为"students"的表,包含id、name和age字段:
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
age INT
);
服务器端API
接下来,我们需要修改服务器端API,以支持根据学生姓名搜索功能:
app.get('/api/students', (req, res) => {
const { name } = req.query;
let query = 'SELECT * FROM students';
if (name) {
query += ` WHERE name LIKE '%${name}%'`;
}
connection.query(query, (error, results) => {
if (error) {
throw error;
}
res.json(results);
});
});
小程序前端页面
在小程序的页面中,我们可以使用一个输入框和一个按钮来实现学生姓名搜索功能。以下是一个简单的示例:
<view class="container">
<input class="input" bindinput="onInput" placeholder="请输入学生姓名">
<button class="button" bindtap="onSearch">搜索</button>
<view wx:for="{{ students }}" wx:key="id">
<view class="student">
<text>{{ item.name }}</text>
<text>{{ item.age }}</text>
</view>
</view>
</view>
Page({
data: {
students: []
},
onInput(e) {
this.setData({
keyword: e.detail.value
});
},
onSearch() {
wx.showLoading({
title: '加载中...'
});
fetchData(this.data.keyword)
.then((data) => {
this.setData({
students: data
});
})
.catch((err) => {
console.error(err);
})
.finally(() => {
wx.hideLoading();
});
},
fetchData(keyword) {
return new Promise((resolve, reject) => {
wx.request({
url: 'http://localhost:3000