手机版

节点使用Koa2搭建网项目的方法

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

随着Node.js的日益火热,各种框架开始层出不穷的涌现出来,Node.js也开始逐渐的被应用到处理服务端请求的场景中。搭建网项目的框架也随之开始出现——快递、koa、koa2、鸡蛋等,当然要了解其好坏还是要自己去啃源码的。本文将不会涉及到源码,只是带领初学者简单了解下Koa2的基本使用,欢迎大家在评论中互相交流学习。

注意:koa2使用了ES7的语法,所以使用时请升级结节版本到最新。了解更详细的源码信息可以到饭桶上的koajs/koa去了解

1.项目目录结构

2.代码逻辑解析

2.1.包结构文件

[package.json]

{“name”:“weixin-node-KOA”,“version”:“1 . 0 . 0”,“description”:“node”。js with KOA 2 ',' private': true,' dependencies ' : { ' KOA ' : '^2.0.0',' KOA-router ' : '^7.0.0',' MySQL ' : ' 2 . 13 . 0 ' },' scripts ' : { ' start ' :启动入口文件

[app.js]

const Koa=require(' Koa ');const app=new Koa();const router2controller=require(' ./app/路由器2控制器。js’);const config=require(' ./config/config。本地的。js’);app。使用(路由器2控制器());app。听(配置。港口);console.log('服务器已启动并侦听端口配置。港口);如果请求的报文体是可扩展置标语言格式,可以添加下面的代码自动解析报文(注意引用koa-xxx的版本要与koa2对应)

const Koa=require(' Koa ');const app=new Koa();const router2controller=require(' ./app/路由器2控制器。js’);const config=require(' ./config/config。本地的。js’);//开始接收到的可扩展标记语言数据请求单独解析存储const XMlparser=require(' KOA-XML-body ');app.use(xmlParser()).使用((ctx,next)={ CTX。数据=CTX。请求。身体;返回next();});//enda PP。使用(路由器2控制器());app。听(配置。港口);console.log('服务器已启动并侦听端口配置。港口);从代码看到引入了一个router2controller.js的文件,这个文件是完成前端请求到具体处理方法的路由过程

2.3.路由器文件

[router2controller.js]

该类将会自动扫描控制器文件夹中的文件来加载请求映射,不需要挨个请求单独配置

寇阿相思树路由器原生提供方法如下:

路由器get('/',async (ctx,next)={ this.body='Hello World!';}) .post('/users ',async (ctx,next)={ //TODO }).put('/users/:id ',async (ctx,next)={ //TODO }).del('/users/:id ',async (ctx,next)={//TODO });自动扫描控制器包实现方法如下

const fs=require(' fs ');const router=require(' KOA-router ')();函数地址映射(路由器,映射){ for(映射中的var URL){ if(URL。开始开关(' GET '){ var path=URL。子串(4);router.get(路径,映射[URL]);控制台。日志(`注册URL映射: GET $ { path } `);} else if(URL。开始开关(' POST '){ var path=URL。子串(5);router.post(路径,映射[URL]);控制台。日志(`注册URL映射: POST $ { path } `);} else if(URL。开始开关(' PUT '){ var path=URL。子串(4);router.put(路径,映射[URL]);控制台。日志(`注册URL映射: PUT $ { path } `);} else if(URL。开始开关(' DELETE '){ var path=URL。子串(7);router.del(路径,映射[URL]);控制台。日志(`注册URL映射: DELETE $ { path } `);} else { console . log(` 0无效的URL : $ { URL } `);} } }函数添加控制器(路由器,目录){ fs。readdirsync(_ dirname/' dir).过滤器((f)={ 0 }返回f.endsWith(').js’);}).forEach((f)={ console。日志(`过程控制器: $ { f }.`);let mapping=require(_ dirname '/dir '/f);地址映射(路由器,映射);});}模块。exports=function(dir){ var controller dir=dir | | ' controller ';添加控制器(路由器、控制器目录);返回路由器。routes();};2.4.控制器

[userController.js]

* * *控制器是用来处理具体请求信息以及返回数据的,userController.js中处理了得到请求获取用户信息,开机自检请求保存用户信息

const userService=require(' ././service/UserServiCe。js’);var getUserinfo=(ctx,next)={让查询=CTX。查询;让userId=query.id让userInfo=用户服务。getuserbyid(UserId);让html=' html正文' ' div userInfo : ' userInfo '/div ' '/正文/html ';CTX。回应。type=' text/html ';CTX。回应。body=html};var saveUserinfo=(ctx,next)={ const RequestString=CTX。数据;//TODO数据处理控制台。日志(RequestString);};模块。导出={ ' GET/GetUserInfo ' : GetUserInfo,' POST/SaveUserInfo ' : SaveUserInfo };2.5.数据处理

[userService.js]

处理封装从***Dao.js获取到的数据返回给控制器

const userDao=require(' ././Dao/UserDao。js’);var getUserById=async(userId)={ var users=userda。getUserById(用户标识);var responseContent=for(让用户成为用户的用户){收割生态内容='姓名:'用户。名称“|;”收割生态内容='年龄:'用户。年龄“|;”收割生态内容='身高:“用户。高度" br/;}返回responseContent}模块。导出={ GetUserBYid : GetUserBYid };2.6.数据获取

[userDao.js]

通过请求传入参数来获取用户数据

const mysql=require(' ././utils/MySQL util。js’);var GetUserByID=async(UserID)={ 0让mysqlOptions={ sql : '从表_用户中选择*其中用户id=?',args :[UserID]};var用户=等待MySQL。exec查询(MySQL OptiOns);if(users . length==0){ 0返回null} else {返回用户;}};模块。导出={ GetUserBYid : GetUserBYid };2.7.数据库操作

[mysqlUtil.js]

包含了数据库连接池控制,连接建立、释放管理,执行大刀发起的数据库操作请求

const MySQL=require(' MySQL ');const config=require(' ./././config/config。本地的。js’);var connectionPool=MySQL。createpool({ ' host ' : config。数据库。主机,“端口”:config.database.port,“用户”:config.database.user,“密码”: config。数据库。密码,“数据库”:配置。数据库。数据库,“字符集”:配置。数据库。字符集,“connectionLimit”:配置。数据库。连接限制,“SupportBigNumbers”: true,“BigNumberStrings”: var release=Connection={ Connection。end(函数(错误){ if(错误){ console.log('连接关闭失败'));} else { console.log('连接关闭成功');} });};var exec query=sqlopdatations={ var results=new Promise(解析,拒绝)={ connectionPool.getConnection((错误,连接)={ if(错误){ console.log('从关系型数据库池获取连接失败!');抛出错误;} var SQL=SqLopons[' SQL '];var args=sqlopdatations[' args '];if(!args){ var query=connection。查询(SQL),(错误,结果)={ if(错误){控制台。日志('执行查询错误!');抛出错误;}解决(结果);});} else { var query=connection。查询(SQL,参数,函数(错误,结果){ if(错误){控制台。日志('执行查询错误!');抛出错误;}解决(结果);});} connection.release(函数(错误){ if(错误){ console.log('Mysql连接关闭失败!');抛出错误;} });});}).然后(函数(chunk){ return chunk;});返回结果;};模块。exports={ release : release,execQuery : execQuery}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:节点使用Koa2搭建网项目的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。