Skip to content

Node.js + 微信小程序

约 1722 字大约 6 分钟

微信小程序Node.js

2025-04-22

wechat node

本文主要介绍如何使用 node(Express.js) 完成一些后端业务的开发,例如 数据库连接,发送邮件验证码。

使用 node 连接本地数据库

  1. 安装 node.js

前往官网下载 node.js。

安装成功后,使用命令查看 node 版本:

node -v

出现版本号,说明 node 已经安装成功。同时,npm 也已经安装成功,可以输入 npm -v 查看版本号。

  1. 安装依赖

在你的计算机任何地方创建一个文件夹(可以在微信小程序根目录),进入文件夹 右键 在终端中打开,依次输入以下命令:

初始化项目,将会自动创建 package.json 配置文件:

npm init -y

安装 Express 框架,用于快速创建HTTP服务器:

npm install express --save

安装 mysql 的软件包:

npm install mysql --save

安装 cors 跨域中间件:

npm install cors --save
  1. 创建数据库连接文件

进行此步之前,请确保已经创建好数据库和表,并数据库连接正常。

在文件夹下创建 server.js ,输入以下代码:

  1. 启动服务

在文件夹中 打开 终端,输入以下命令:

node server.js
  1. 访问请求测试 可以在浏览器中访问 http://localhost:3000/allusers ,如果看到返回的数据,说明连接成功。

或在小程序中进行请求:

问题

  1. Client does not support authentication protocol requested by server...

这是由于最新的 MySQL 模块并未完全支持 MySQL 8.0caching_sha2_password 加密方式,而 MySQL 8.0 中默认仍然是 caching_sha2_password 加密方式,因此用户认证不通过。

可以通过指令方式修改:

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.01 sec)

使用 node 发送邮箱验证码

  1. 获取授权码
  • 首先使用个人账号登录网页版QQ邮箱
  • 登录后找到设置,点击设置
  • 进入设置,点击账号
  • 找到并勾选SMTP发信后保存到服务器
  • 找到管理服务并点击
  • 进到账号与安全,往下拉,找到并点击生成授权码,然后进行短信验证
  • 验证通过,生成授权码,复制授权码
  1. 安装依赖

先确保成功安装 node 后,安装 nodemailer 邮件发送软件包:

npm install nodemailer --save

安装 Express 框架,用于快速创建HTTP服务器:

npm install express --save
  1. 创建邮箱连接文件

在进行测试访问之前,同样需要先启动服务:

node server.js

由于 /sendcode 验证码接口是 POST 请求,不能直接通过浏览器测试,可以使用 postman 进行测试,或通过小程序 wx.request 完成请求:

wx.request({
    url: 'http://localhost:3000/sendcode',
    methods: 'POST',
    data:{
        email: this.data.email
    },
    success: res => {
        console.log(res.data);
    }
})

最佳方案

当后端体量大起来后,显然将业务逻辑、数据库配置、路由都放在一起是不合适的,不利于维护与阅读。以下是按照 Express 标准文件结构重构后的项目结构方案:

Express Node.js

src

app.js

package.json

config

db.js

middleware.js

services

userService.js

routes

userRoutes.js

src/app.js
src/package.json
src/config/db.js
src/config/middleware.js
/**
 * 中间件配置
 */
const express = require('express');
const cors = require('cors');

const applyMiddleware = (app) => {
  app.use(cors()); // 跨域
  app.use(express.json()); // JSON解析中间件
  app.use(express.urlencoded({ extended: true }));
};

module.exports = applyMiddleware;
src/services/userService.js
src/routes/userRoutes.js
/**
 * 用户路由配置
 */
const express = require('express');
const router = express.Router();

const db = require('../config/db');
const userService = createUserService(db);

const createUserService = require('../services/userService');

router.get('/login/:email/:password', userService.userLoginHandler); // 登录

module.exports = router;

使用以上的项目结构,可以将后端逻辑清晰的分开,便于维护和扩展。

访问示例当中的登录请求则是:

wx.request({
    url: 'http://localhost:3000/api/user/login/' + email + '/' + password,
    method: 'GET',
    success(res) {
        // 成功逻辑
    },
    fail(err) {
        // 失败逻辑
    }
})