当前位置: 首页 > 后端技术 > Node.js

koa2+mysql搭建用户信息注册登录接口服务

时间:2023-04-04 01:32:32 Node.js

koa2官网https://koa.bootcss.com/什么是koa?Koa是一个全新的Web框架,由Express背后的原始团队打造,致力于成为Web应用和API开发领域更小、表现力更强、更健壮的基石。通过利用异步函数,Koa可以帮助您放弃回调并大大增强错误处理。Koa没有捆绑任何中间件,而是提供了一套优雅的方法来帮助您快速愉快地编写服务器端应用程序。初始化koa项目npminitinstallkoanpmikoacreateanewapp.js//importkoaconstKoa=require('koa')//创建一个koa对象constapp=newKoa()//listenportconstport=3000app.听(端口);console.log(`启动成功,服务端口为:${port}`)runapp.jsnodeapp.js//console.log(`启动成功,服务端口为:${port}`)添加启动脚本命令//package.json"scripts":{"test":"echo\"Error:notestspecified\"&&exit1","dev":"nodeapp.js"}可以运行npmrundev启动我们服务。使用www启动服务在根目录下新建一个bin文件夹,然后新建一个www文件//bin/wwwvarapp=require('../app');varhttp=require('http');varserver=http.createServer(app);//服务监听端口server.listen('3001');配置www启动脚本//package.json"scripts":{"test":"echo\"Error:notestspecified\"&&exit1","dev":"nodebin/www"}然后npmrundev即可开始。服务的返回内容//importkoaconstkoa=require('koa')//创建一个koa对象constapp=newKoa()//返回内容app.use(asyncctx=>{ctx.body='HelloWorld';});//监听端口constport=3000app.listen(port);console.log(`启动成功,服务端口为:${port}`)安装中间件koa-bodyparser这个中间件可以post请求的参数以json格式返回;npminstall--savekoa-bodyparserbodyparseruse//importkoaconstKoa=require('koa')constbodyParser=require('koa-bodyparser');//创建一个koa对象constapp=newKoa()app.use(bodyParser());//request.method可以得到请求方法。//get、post或其他类型(请求对象被ctx包围,所以也可以通过ctx.method获取)app.use(async(ctx)=>{if(ctx.url==='/'&&ctx.method==='POST'){ctx.body=ctx.request.body}else{//其他请求显示404ctx.body='

404!

'}})//监听端口constport=3000app.listen(port);console.log(`启动成功,服务端口:${port}`)在写接口之前,我们先安装路由Koa-routerKoa-router是koa的一个路由中间件,它请求的URL和方法(如:GET,POST、PUT、DELETE等)可以匹配到相应的响应者或页面。npminstallkoa-router--save使用koa-routerconstRouter=require('koa-router');//引入koa-routerconstrouter=newRouter();//创建路由,支持传参//指定url匹配router.get('/',async(ctx)=>{ctx.type='html';ctx.body='

helloworld!

';})//调用router.routes()来组装匹配的路由并返回一个合并的中间件//调用router.allowedMethods()得到一个中间件。当发送不合格的请求时,将返回`405MethodNotAllowed`或`501NotImplemented`app.use(router.routes());app.use(router.allowedMethods({//throw:true,//抛出错误而不是设置响应头状态//notImplemented:()=>'不支持当前请求Requiredfunction',//methodNotAllowed:()=>'Unsupportedrequestmethod'}));koa-router不同的请求方式koa-router的请求方式有:get,put,post,patch,delete,del,and使用的方法是router.method(),比如router.get()和router.post()。并且router.all()将匹配所有请求方法。//指定一个url来匹配router.get('/test',async(ctx)=>{ctx.type='html';ctx.body='

helloworld!

';})router.get("/user",async(ctx)=>{ctx.body='叫我战隐';})新建router/index.js路由文件夹//router/index.jsconstRouter=require('koa-router')constrouter=newRouter()//接口函数classUserController{//新增一条数据asyncgetUserName(ctx){ctx.body={code:200,message:'叫我展来hide',type:'warning'}}}//instanceconstuserController=newUserController()//testrouter.get('/test',userController.getUserName)module.exports=router测试安装中间件koa2-corscorscross-域资源共享是一种机制,用于允许特定Web应用程序访问不同源服务器上的指定资源。cors安装npminstallkoa-cors--savecorsuse//app.jsconstCors=require('koa2-cors')app.use(Cors())koa连接数据库(mysql)需要安装sql依赖;npminstallmysql--saveSQL配置新建一个sql文件夹,主要用于存放sql的各种操作;sql/config.jsconstmysqlConfig={user:"Koa",//账号密码:"Koa",//密码database:"Koa",//数据库host:"122.112.172.87",//服务器地址端口:3306,//数据库端口timezone:'08:00'};module.exports=mysqlConfig;koa封装了sql数据库查询函数//sql/query.jsconstmysql=require("mysql");constconfig=require("./config");//创建连接池constpool=mysql.createPool(config);constquery=(sql,val)=>{returnnewPromise((resolve,reject)=>{pool.getConnection(function(err,connection){if(err){reject(err);}else{connection.query(sql,val,(err,fields)=>{if(err){reject(err);}else{解决(字段);}connection.release();});}});});};module.exports={查询};新界面-用户信息注册和登录新建两个文件夹controller和modelcontrollermain存储操作和数据处理的一些逻辑//controller/userController.js//用户注册constUser=require('../model/userModel')classUserController{//用户注册asyncregister(ctx){let{name,tel,password}=ctx.request.bodyconstnames=awaitUser.getUser(name)//用户名是否重复consttels=awaitUser.getTel(tel)//手机号码是否重复if(tels.length>0){ctx.body={type:'warning',message:'此电话号码已注册'}}else{if(names.length>0){ctx.body={type:'error',message:'UsernameExists'}}else{awaitUser.insert(name,tel,password)ctx.body={type:'success',代码:0,message:'注册成功'}}}}//异步登录n(ctx){lettel=ctx.request.body.telletpassword=ctx.request.body.passwordconstres=(awaitUser.getTel(tel))[0]if(res){if(res.password==password){ctx.body={code:0,data:{name:res.name,tel:res.tel},message:'登录成功',type:'成功'}}else{ctx.body={type:'error',message:'用户名或密码不正确'}}}else{ctx.body={type:'error',message:'用户名不存在'}}}}module.exports=newFunctions在UserController()模型中操作数据库(包括数据库语句)//model/userModel.jsconstquery=require('../sql/query')classUserModel{//获取用户asyncgetUser(name){returnawaitquery(`SELECT*FROMuserWHEREname='${name}'`)}//获取用户电话号码asyncgetTel(tel){returnawaittquery(`SELECT*FROMuserWHEREtel='${tel}'`)}//用户注册asyncinsert(name,tel,password){returnawaitquery(`INSERTINTOuser(name,tel,password)VALUES('${name}','${tel}','${password}')`)}}module.exports=newUserModel()在路由器路由文件中注册//router/index.jsconstRouter=require('koa-router')constrouter=newRouter()//用户constUserController=require('../controller/UserController')//用户注册router.post('/register',UserController.register)//用户信息登录router.post('/login',UserController.login)module.exports=路由接口调用可以通过post请求调用/register和/login接口;当然你也可以封装其他更多的接口结局至此,用户注册登录接口就完成了。后续继续添加其他功能。有兴趣的可以查看源码源码地址,一起学习,一起努力。我是詹多当,很高兴认识你。