程序基础实战 2_第1页
程序基础实战 2_第2页
程序基础实战 2_第3页
程序基础实战 2_第4页
程序基础实战 2_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XAMPP/MySQLconfig/db.jsmiddlewares/models/controllers/routes/app.js第8章基于Node.js+MySQL的后台API开发课堂讲解《微信小程序开发实战教程(Node.js+MySQL)(AI协同)(微课版)(第2版)》学习目标第8章基于Node.js+MySQL的后台API开发本章项目的数据库部分采用MySQL进行讲解,并通过一个易于理解的选课系统作为示例进行数据库结构设计。后台开发使用Node.js作为编程语言,通过编写服务端API,与前端微信小程序进行数据交互。从而让读者掌握从前端页面构建、后端API编写到数据库存储设计的完整开发流程,理解微信小程序与服务器之间的数据请求、处理与响应机制。1理解并掌握安装及配置XAMPP的方法。2理解Node.js访问MySQL数据库并设计API的方法。3掌握使用Apifox测试API的方法。28.1

安装及配置XAMPP第8章基于Node.js+MySQL的后台API开发XAMPP(Apache+MariaDB+PHP+Perl)是一个功能强大的网站开发集成软件包,集成了Web服务器、数据库服务器及脚本解释环境等组件。它可以在Windows、Linux、macOS等操作系统中安装与使用,支持多种语言。XAMPP非常容易安装和使用,只需下载、解压,适当配置后启动即可。在实际开发中,也可以使用其他MySQL数据库软件。【演练8.1】下载和安装XAMPP。1如图8-1所示,在XAMPP官网中下载所需版本。2等待下载结束,运行下载好的安装程序。图8-1

下载XAMPP38.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。3在弹出的“Setup”窗口中单击“Next”按钮,如图8-2所示。4如图8-3所示,选择所需组件,此处保持默认选择,单击“Next”按钮。图8-2

“Setup”窗口图8-3

选择所需组件48.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。5如图8-4所示,选择安装文件夹,这里使用默认路径“C:\xampp”,单击“Next”按钮。6如图8-5所示,进入BitnamiforXAMPP界面,保持默认选择,单击“Next”按钮。图8-4

选择安装文件夹图8-5

BitnamiforXAMPP界面58.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。7如图8-6所示,进入ReadytoInstall界面,单击“Next”按钮。8如图8-7所示,显示安装中,需等待一段时间。图8-6

ReadytoInstall界面图8-7

安装中68.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。9如图8-8所示,安装完成,单击“Finish”按钮。10系统将自动运行。以后可运行“C:\xampp\xampp-control.exe”以启动XAMPP,如图8-9所示。图8-8

安装完成图8-9

运行xampp-control.exe78.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。11选择语言,此处保持默认选择,单击“Save”按钮。12如图8-10所示,单击“Start”按钮,启动Apache服务。图8-10

启动Apache服务88.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。13Apache服务的默认端口为80,如果不能正常启动,则需更改端口。单击“Config”按钮,选择“Apache(httpd.conf)”选项,修改Apache(httpd.conf),如图8-11所示。14如图8-12所示,这里将Apache服务的端口修改为81。图8-11

修改Apache(httpd.conf)图8-12

修改Apache服务的端口98.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。15如图8-13所示,重新启动Apache服务,注意图中鼠标指针所在的位置,其显示端口为81。16如图8-14所示,单击“Start”按钮,启动MySQL服务。图8-13

重新启动Apache服务图8-14

启动MySQL服务108.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。17MySQL服务的默认端口为3306,如果无法正常启动,则需要更改端口,单击“Config”按钮,选择“my.ini”选项,修改my.ini,如图8-15所示。18如图8-16所示,这里MySQL服务的端口保持3306不变。如果出现冲突,则可尝试使用3307、3308等端口。图8-15

修改my.ini图8-16

修改MySQL服务的端口118.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。19修改XAMPP运行环境,如图8-17所示,单击“Config”按钮。20打开“ConfigurationofControlPanel”窗口,如图8-18所示,单击“ServiceandPortSettings”按钮。图8-17

修改XAMPP运行环境图8-18

“ConfigurationofControlPanel”窗口128.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。21选中“Apache”标签页,如图8-19所示,将“Apache2.4”的“MainPort”设置为81(默认为80,如果没有修改端口,则无须修改),单击“Save”按钮。22选中“MySQL”标签页,如图8-20所示,将“MySQL”的“MainPort”设置为3306(默认为3306),单击“Save”按钮。图8-19

设置“Apache2.4”的“MainPort”图8-20

设置“MySQL”的“MainPort”138.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。23如图8-21所示,单击“Save”按钮,保存设置。24如图8-22所示,单击Apache的“Admin”按钮,测试Apache服务。图8-21

保存设置图8-22

测试Apache服务148.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。25如图8-23所示,系统将启动默认浏览器,进入Apache主页,即进入http://localhost:81/dashboard/页面。如果端口为80,则进入http://localhost/dashboard/页面。26如图8-24所示,单击MySQL的“Admin”按钮,测试MySQL服务。图8-23

Apache主页图8-24

测试MySQL服务158.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.1】下载和安装XAMPP。27如图8-25所示,系统将启动phpMyAdmin,进入http://localhost:81/phpmyadmin/页面。如果端口为80,则进入http://localhost/phpmyadmin/页面。图8-25

启动phpMyAdmin168.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发【演练8.2】运行数据库脚本,创建选课数据库。1接上例,如图8-26所示,单击工具栏中的“SQL”按钮,将配套资源文件夹中“数据库”文件夹下“xk.sql”文件中的内容复制到窗口中,单击“执行”按钮,执行SQL语句。图8-26

执行SQL语句178.1

安装及配置XAMPP(续)第8章基于Node.js+MySQL的后台API开发创建一个简单的选课数据库。数据库中表的含义将在使用时逐步介绍。2如图8-27所示,单击图标,刷新导航面板,可以看到多了一个数据库“xk”。3如图8-28所示,这里有课程信息表course、学生信息表student、学生选课表stucou(某学号报名选修了某门课程),可先浏览一下各个表中的数据。图8-27

刷新导航面板图8-28

各表数据188.2

运行并访问MySQL数据库的选课系统后台API第8章基于Node.js+MySQL的后台API开发【演练8.3】首先确保系统能正常运行,并简单观察结果,以便更好地理解项目目标,为实际开发做好准备。1用VSCode打开配套资源文件夹中的“8\xknodeapi”文件夹,然后检查项目根目录下.env文件中的配置与自己的数据库环境是否匹配。.env文件的内容如下。DB_HOST=localhost#数据库用户名,根据实际环境填写DB_USER=root#数据库用户名对应的密码,根据实际环境填写DB_PASSWORD=#MySQL端口,根据实际环境填写DB_PORT=3306#数据库名称,根据实际环境填写DB_NAME=xk#JWT密钥,可填写自己喜欢的任意字符串JWT_SECRET=your_jwt_secret_key#服务器端口PORT=3000198.2

运行并访问MySQL数据库的选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.3】首先确保系统能正常运行,并简单观察结果,以便更好地理解项目目标,为实际开发做好准备。2按Ctrl+`组合键进入控制台,在控制台中输入命令nodemonapp.js并执行。3打开浏览器,输入:3000/api/course,结果如图8-29所示,显示了Xk数据库中course表的数据。图8-29

测试访问数据库的路由4测试完毕后,按Ctrl+C组合键中断运行。208.3

开发访问MySQL数据库的选课系统后台API第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。1准备一个空的项目文件夹,可以在桌面上创建一个空文件夹xknodeapi。2按Ctrl+`组合键进入控制台,确认路径为项目所在文件夹。3在控制台中输入如下命令并执行,初始化一个新的Node.js项目。npminit-y218.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。4安装项目需要用到的第三方库,在控制台中输入如下命令并执行。npminstallexpressmysql2body-parserbcryptjsjsonwebtokendotenvcorsmysql2是用于MySQL数据库驱动程序的改进版本,它提供了更高的性能、更丰富的功能以及更好的兼容性。mysql2基本兼容mysql的API,同时引入了许多新特性,如支持Promise和async/await,使得使用async/await语法更加方便,提升代码的可读性和可维护性;支持连接池,可以有效地管理和复用数据库连接,提升了应用程序的性能和响应速度。228.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发body-parser的核心功能是解析HTTP请求体(Body)中的数据。在Web开发中,客户端通过POST或其他请求发送数据时,这些数据位于请求的body部分。原生的Node.js或早期的Express无法直接获取这些格式化的数据。body-parser的作用就是将这些原始数据转换成服务器端JavaScript易于使用的格式。bcryptjs是一个用于密码哈希(加密)的JavaScript库,专门用来安全地存储用户密码。它通过加盐(Salting)和自适应哈希算法来保护密码,即使数据库信息泄露,攻击者也难以破解原始密码。jsonwebtoken是一个用于生成、解析和验证JSONWebToken(简称JWT)的Node.js库,适用于用户认证和授权。核心作用有生成Token、验证Token、解析Token。dotenv的主要作用是从.env文件加载环境变量到process.env中,方便管理敏感配置,如数据库密码、API密钥等。cors是用于解决跨域问题的一个工具包。238.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。5在项目根目录下创建文件.env,内容如下。DB_HOST=localhost#数据库用户名,根据实际环境填写DB_USER=root#数据库用户名对应的密码,根据实际环境填写DB_PASSWORD=#MySQL端口,根据实际环境填写DB_PORT=3306#数据库名称,根据实际环境填写DB_NAME=Xk#JWT密钥,可填写自己喜欢的任意字符串JWT_SECRET=your_jwt_secret_key#服务器端口PORT=3000248.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发这段代码也可以看作一个环境变量配置文件(通常命名为.env),用于存储应用程序的配置信息,例如数据库连接、JWT密钥和服务器端口等。该文件通常被dotenv等库加载,将变量注入process.env中,从而在代码中通过process.env.DB_HOST等方式访问相关信息。DB_HOST=localhost:设置数据库的主机地址为localhost,表示数据库运行在本地计算机上。DB_USER=root:设置数据库的用户名,注意需根据实际环境进行修改。DB_PASSWORD=:设置数据库的密码,注意需根据实际环境进行修改。DB_PORT=3306:设置数据库的端口,注意需根据实际环境进行修改。DB_NAME=Xk:设置要连接的数据库的名称。JWT_SECRET=...:设置JWT密钥,可自行更改,实际项目中应替换为高强度的随机字符串。PORT=3000:设置应用程序的服务器端口,3000是Node.js应用的常见默认端口。258.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。6在项目根目录下创建目录config,在该目录下创建文件db.js,内容如下。constmysql=require('mysql2/promise');require('dotenv').config();constpool=mysql.createPool({host:process.env.DB_HOST,user:process.env.DB_USER,password:process.env.DB_PASSWORD,port:process.env.DB_PORT,database:process.env.DB_NAME,waitForConnections:true,connectionLimit:10,queueLimit:0});module.exports=pool;268.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。7在项目根目录下创建目录middlewares,在该目录下创建文件authMiddleware.js,内容如下。constjwt=require('jsonwebtoken');require('dotenv').config();constauthMiddleware=(req,res,next)=>{//从请求头获取Tokenconsttoken=req.header('Authorization')?.replace('Bearer','');if(!token){returnres.status(401).json({message:'未提供认证令牌'});}try{//验证Tokenconstdecoded=jwt.verify(token,process.env.JWT_SECRET);req.student=decoded;next();}catch(err){returnres.status(401).json({message:'无效的认证令牌'});}};module.exports=authMiddleware;作用:验证请求头中的Authorizationtoken,并将解码后的信息添加到req.student。278.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。8在项目根目录下创建目录models,在该目录下创建文件courseModel.js,内容如下。constpool=require('../config/db');constCourse={asyncgetCourse(){const[rows]=awaitpool.query('SELECT*FROMcourseORDERBYCouNo');returnrows;}};module.exports=Course;288.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。constpool=require('../config/db');constStuCou={asynccreate(stuCouData){const{StuNo,CouNo,WillOrder,State,RandomNum}=stuCouData;const[result]=awaitpool.query('INSERTINTOstucou(StuNo,CouNo)VALUES(?,?)',[StuNo,CouNo]);returnresult;},asyncgetByStuNo(StuNo){const[rows]=awaitpool.query('SELECTcourse.*FROMcourse,stucouWHEREstucou.StuNo=?ANDcourse.CouNo=stucou.CouNoORDERBYcourse.CouNo',[StuNo]);returnrows;},asyncdelete(StuNo,CouNo){const[result]=awaitpool.query('DELETEFROMstucouWHEREStuNo=?ANDCouNo=?',[StuNo,CouNo]298.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发(9)在models目录下创建文件stucouModel.js,内容如下。(第2/2段));returnresult;},asyncgetOne(StuNo,CouNo){const[rows]=awaitpool.query('SELECT*FROMstucouWHEREStuNo=?ANDCouNo=?',[StuNo,CouNo]);returnrows[0];}};module.exports=StuCou;308.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。constpool=require('../config/db');constbcrypt=require('bcryptjs');constStudent={asyncregister(studentData){const{StuNo,StuName,Pwd}=studentData;consthashedPassword=awaitbcrypt.hash(Pwd,10);const[result]=awaitpool.query('INSERTINTOStudent(StuNo,StuName,Pwd)VALUES(?,?,?)',[StuNo,StuName,hashedPassword]);returnresult;},asynclogin(StuNo,Pwd){const[rows]=awaitpool.query('SELECT*FROMStudentWHEREStuNo=?',[StuNo]);if(rows.length===0){thrownewError('用户不存在');}conststudent=rows[0];constisMatch=awaitpare(Pwd,student.Pwd);if(!isMatch){thrownewError('密码不正确');}returnstudent;},318.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发(10)在models目录下创建文件studentModel.js,内容如下。(第2/3段)asyncupdatePassword(StuNo,oldPwd,newPwd){const[rows]=awaitpool.query('SELECTPwdFROMStudentWHEREStuNo=?',[StuNo]);if(rows.length===0){thrownewError('用户不存在');}constisMatch=awaitpare(oldPwd,rows[0].Pwd);if(!isMatch){thrownewError('旧密码不正确');}consthashedPassword=awaitbcrypt.hash(newPwd,10);const[result]=awaitpool.query('UPDATEStudentSETPwd=?WHEREStuNo=?',[hashedPassword,StuNo]);returnresult;},asyncgetStudentByStuNo(StuNo){const[rows]=awaitpool.query('SELECT*FROMStudentWHEREStuNo=?',[StuNo]);returnrows;},asyncgetStudentsByCouNo(CouNo){328.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发(10)在models目录下创建文件studentModel.js,内容如下。(第3/3段)const[rows]=awaitpool.query('SELECTStudent.StuNo,StuNameFROMStudent,StuCouWHEREStuCou.CouNo=?ANDStudent.StuNo=StuCou.StuNo',[CouNo]);returnrows;}};module.exports=Student;338.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。constjwt=require('jsonwebtoken');constStudent=require('../models/studentModel');require('dotenv').config();constauthController={asyncregister(req,res){try{const{StuNo,StuName,Pwd}=req.body;//检查学号是否已存在constexisting=awaitStudent.getStudentByStuNo(StuNo);if(existing.length>0){returnres.status(400).json({message:'学号已存在'});}awaitStudent.register({StuNo,StuName,Pwd});res.status(201).json({message:'注册成功'});}catch(error){res.status(500).json({message:error.message});}},asynclogin(req,res){try{const{StuNo,Pwd}=req.body;conststudent=awaitStudent.login(StuNo,Pwd);//生成JWTTokenconsttoken=jwt.sign({StuNo:student.StuNo,StuName:student.StuName},process.env.JWT_SECRET,{expiresIn:'1h'});348.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发(11)在controllers目录下创建文件authController.js,内容如下。(第2/3段)res.json({message:'登录成功',token,student:{StuNo:student.StuNo,StuName:student.StuName}});}catch(error){res.status(401).json({message:error.message});}},asyncupdatePassword(req,res){try{const{StuNo}=req.student;const{oldPwd,newPwd}=req.body;awaitStudent.updatePassword(StuNo,oldPwd,newPwd);res.json({message:'密码修改成功'});}catch(error){res.status(400).json({message:error.message});}},asyncgetProfile(req,res){try{const{StuNo}=req.student;conststudent=awaitStudent.getStudentByStuNo(StuNo);res.json(student);}catch(error){358.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发(11)在controllers目录下创建文件authController.js,内容如下。(第3/3段)res.status(500).json({message:error.message});}},asyncgetStudentsByCouNo(req,res){try{const{CouNo}=req.params;conststudents=awaitStudent.getStudentsByCouNo(CouNo);res.json(students);}catch(error){res.status(500).json({message:error.message});}}};module.exports=authController;368.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。12在controllers目录下创建文件courseController.js,内容如下。constCourse=require('../models/courseModel');constcourseController={asyncgetAll(req,res){try{constcourses=awaitCourse.getCourse();res.json(courses);}catch(error){res.status(500).json({message:error.message});}}};module.exports=courseController;378.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。constStuCou=require('../models/stucouModel');conststucouController={asynccreate(req,res){try{const{StuNo}=req.student;const{CouNo}=req.body;//检查课程是否已存在constexisting=awaitStuCou.getOne(StuNo,CouNo);if(existing){returnres.status(400).json({message:'该课程已选'});}awaitStuCou.create({StuNo,CouNo});res.status(201).json({message:'选课成功'});}catch(error){res.status(500).json({message:error.message});}},asyncgetAll(req,res){try{const{StuNo}=req.student;conststucous=awaitStuCou.getByStuNo(StuNo);res.json(stucous);}catch(error){res.status(500).json({message:error.message});}},asyncdelete(req,res){try{const{StuNo}=req.student;const{CouNo}=req.params;388.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发(13)在controllers目录下创建文件stucouController.js,内容如下。(第2/2段)awaitStuCou.delete(StuNo,CouNo);res.json({message:'删除成功'});}catch(error){res.status(500).json({message:error.message});}},asyncgetOne(req,res){try{const{StuNo}=req.student;const{CouNo}=req.params;conststucou=awaitStuCou.getOne(StuNo,CouNo);if(!stucou){returnres.status(404).json({message:'未找到该选课记录'});}res.json(stucou);}catch(error){res.status(500).json({message:error.message});}}};module.exports=stucouController;398.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。14在项目根目录下创建目录routes,在该目录下创建文件authRoutes.js,内容如下。constexpress=require('express');constauthController=require('../controllers/authController');constauthMiddleware=require('../middlewares/authMiddleware');constrouter=express.Router();//注册router.post('/register',authController.register);//登录router.post('/login',authController.login);//修改密码router.put('/password',authMiddleware,authController.updatePassword);//获取个人信息router.get('/profile',authMiddleware,authController.getProfile);router.get('/getStudentsByCouNo/:CouNo',authController.getStudentsByCouNo);module.exports=router;408.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。15在routes目录下创建文件courseRoutes.js,内容如下。constexpress=require('express');constcourseController=require('../controllers/courseController');constauthMiddleware=require('../middlewares/authMiddleware');constrouter=express.Router();//获取所有课程router.get('/',courseController.getAll);module.exports=router;16在routes目录下创建文件stucouRoutes.js,内容如下。constexpress=require('express');conststucouController=require('../controllers/stucouController');constauthMiddleware=require('../middlewares/authMiddleware');constrouter=express.Router();//所有路由都需要认证router.use(authMiddleware);//获取所有选课router.get('/',stucouController.getAll);//报名选课router.post('/',stucouController.create);//获取单个选课router.get('/:CouNo',stucouController.getOne);//删除选课router.delete('/:CouNo',stucouController.delete);module.exports=router;418.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。17在项目根目录下创建文件app.js,内容如下。require('dotenv').config();constexpress=require('express');constbodyParser=require('body-parser');constcors=require('cors');constauthRoutes=require('./routes/authRoutes');conststucouRoutes=require('./routes/stucouRoutes');constcourseRoutes=require('./routes/courseRoutes');constapp=express();//中间件app.use(cors());app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended:true}));//路由app.use('/api/auth',authRoutes);app.use('/api/stucou',stucouRoutes);app.use('/api/course',courseRoutes);//错误处理app.use((err,req,res,next)=>{console.error(err.stack);res.status(500).send('Somethingbroke!');});constPORT=process.env.PORT||3000;app.listen(PORT,()=>{console.log(`Serverrunningon:${PORT}`);});428.3

开发选课系统后台API(续)第8章基于Node.js+MySQL的后台API开发【演练8.4】基于MySQL开发选课系统的后台API。18如图8-30所示,左侧目录树是完整的项目结构。在控制台中输入命令nodemonapp.js并执行,运行过程中请勿中断。图8-30

运行项目438.4

用Apifox测试API第8章基于Node.js+MySQL的后台API开发前面已经开发好了后台的API,在开发具体的微信小程序之前需要先验证这些API能否正常工作。常用的API测试工具软件有很多,如Postman、Insomnia、Apifox、Hoppscotch。Apifox是一款优秀的国产软件,可以方便地定义API的请求方法(如GET、POST等)、请求路径、请求参数、响应数据结构等。【演练8.5】使用Apifox测试选课系统的后台API。1在测试之前,需先在浏览器(如Edge)中安装插件ApifoxBrowserExtension,如图8-31所示,单击按钮,选择“扩展”选项。图8-31

选择“扩展”选项448.4

用Apifox测试API(续)第8章基于Node.js+MySQL的后台API开发【演练8.5】使用Apifox测试选课系统的后台API。2如图8-32所示,选择“获取MicrosoftEdge扩展”选项。3如图8-33所示,在左侧输入框中输入“apifox”,在搜索结果中单击“ApifoxBrowserExtension”右侧的“获取”按钮。图8-32

选择“获取MicrosoftEdge扩展”选项图8-33

获取ApifoxBrowserExtension458.4

用Apifox测试API(续)第8章基于Node.js+MySQL的后台API开发【演练8.5】使用Apifox测试选课系统的后台API。4如图8-34所示,单击“添加扩展”按钮。5进入Apifox官网(需自行完成注册与登录操作)。6如图8-35所示,在某一团队(本例为个人团队)下单击“新建项目”按钮。注意,网站可能改版,找到类似功能即可。图8-34

单击“添加扩展”按钮图8-35

单击“新建项目”按钮468.4

用Apifox测试API(续)第8章基于Node.js+MySQL的后台API开发【演练8.5】使用Apifox测试选课系统的后台API。7如图8-36所示,“项目类型”保持默认的“HTTP”,输入项目名称“xk”,单击“新建”按钮。8如图8-37所示,单击“新建接口”按钮。图8-36

新建“xk”项目图8-37

单击“新建接口”按钮478.4

用Apifox测试API(续)第8章基于Node.js+MySQL的后台API开发【演练8.5】使用Apifox测试选课系统的后台API。9如图8-38所示,设置请求类型为“GET”,在地址栏中输入:3000/api/course,单击“发送”按钮,下方会显示该API的返回结果(所有课程信息)。10单击“保存”按钮,将名称设置为“获取所有课程信息”,然后单击“确定”按钮,以便以后需要用到该API时能够快速找到并再次测试。图8-38

测试API488.4

用Apifox测试API(续)第8章基于Node.js+MySQL的后台API开发【演练8.5】使用Apifox测试选课系统的后台API。11如图8-39所示,单击按钮,选择“新建接口”选项,测试下一个API。12如图8-40所示,设置请求类型为“GET”,在地址栏中输入:3000/api/auth/getStudentsByCouNo/001。单击“发送”按钮,下方会显示该API的返回结果。图8-39

选择“新建接口”选项图8-40

获取指定课程的报名学生名单498.4

用Apifox测试API(续)第8章基于Node.js+MySQL的后台API开发【演练8.5】使用Apifox测试选课系统的后台API。12将地址中的001修改为002,重新输入:3000/api/auth/getStudentsByCouNo/002。单击“发送”按钮,则结果为选择了002这门课程的所有学生名单。保存该API,命名为“获取指定课程的报名学生名单”。13注册API测试。如图8-41所示,设置请求类型为“POST”,在地址栏中输入http://localhost:3000/api/auth/register。选中“Body”标签页,再选中“x-www-form-urlencoded”标签页,输入参数名(StuNo、StuName、Pwd)和参数值(11111111、张三、11111111)。单击“发送”按钮,下方会显示“注册成功”。图8-41

注册用户508.4

用Apifox测试API(续)第8章基于Node.js+MySQL的后台API开发【演练8.5】使用Apifox测试选课系统的后台API。14如图8-42所示,在数据库中进行验证,Student表中添加了一条记录,密码为加密后的密文。15登录API测试。如图8-43所示,设置请求类型为“POST”,在地址栏中输入:3000/api/auth/login。图8-42

Student表中添加了一条记录图8-43

用户登录518.4

用Apifox测试API(续)第8章基于Node.js+MySQL的后台API开发在“Body”标签页中选中“x-www-form-urlencoded”标签页,输入参数名(StuNo、Pwd)和参数值(00000001、11111111)。数据库中预设了学号为00000001的学生的密码为11111111。单击“发送”按钮,页面下方会显示“登录成功”,并返回一个Token。复制该字符串(实际结果可能与截图不同),后续步骤中将会用到。保存该API,命名为“用户登录”。前面几个API都是不要求登录就可以访问的API,后续测试的API要求正确登录后才可以访问,也就是请求头中需要有正确的Token。Node.js项目中使用jsonwebtoken库来生成、返回、验证Token,工作原理大致如下。①客户端登录,若登录成功服务器端返回Token(如JWT)。②客户端请求受保护API时在Authorization头中附加BearerT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论