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

Koa从零搭建到Api实现-项目搭建

时间:2023-04-03 11:05:38 Node.js

Koa从零搭建到Api实现-项目搭建什么是Koa?Koa是一个新的Web框架,由Express背后的同一个人构建,旨在成为Web应用程序和API开发领域中更小、更具表现力和更健壮的基石。通过利用异步函数,Koa可以帮助您放弃回调并大大增强错误处理。Koa没有捆绑任何中间件,而是提供了一套优雅的方法来帮助您快速愉快地编写服务器端应用程序。KoavsExpressKoa使用promises和异步函数来摆脱回调地狱应用程序并简化错误处理。它暴露自己ctx.request和ctx.response对象而不是节点req和res对象。另一方面,Express为节点req和res对象增加了额外的属性和方法,并包括许多其他“框架”功能,例如路由和模板,这是Koa没有的。因此,如果您希望更接近node.js和传统的node.js风格编码,您可能希望坚持使用Connect/Express或类似的框架。如果你想摆脱回调,使用Koa。综上所述,Koa是一个比Express更精简并利用了node新特性的中间件框架。和之前的express相比,是一个庞大的框架。如果喜欢DIY,可以考虑Koa。它有足够的扩展和中间件,而且它自己写起来非常简单。如果你想简单一点,想找个什么都有的框架,那就先用Express。如果你有兴趣了解更多不同之处,请访问KoavsExpressKoa项目构建注意,本教程针对有一定Koa使用经验的用户。如果你还不了解Koa,请阅读以下文档Koa中文文档KoaDocumentation太简单了。虽然每个API都有解释,但是整理和应用起来还是有难度的。可以说初学者很难。非常不友好。笔者的第一个Koa项目,把所有的接口、逻辑、配置等都写在了app.js中。虽然运行完美,但是可读性和可维护性极差,所以一个好的目录结构显得尤为重要。创建config目录-配置模型-数据库模型(ROM)控制器-控制器中间件-中间件公共-静态资源服务-服务路由器-路由app.js-启动文件依赖安装创建项目目录后,我们需要安装一些依赖我们使用babel-core/babel-preset-es2015-让nodeJs支持es6模块koa-koa2koa-body-请求体解析koa-cache-control-缓存控制koa-compress-gzipkoa-cors-跨域koa-logger-日志koa-onerror-错误处理koa-router-路由koa-session-sessionkoa-static-静态资源服务koa-helmet-securemd5-md5加密mkdirp-递归创建目录可以根据需要选择,但是必须安装一些依赖koa-koa2koa-body-requestbody解析koa-router-路由后面的内容会解释每个插件的用途和使用方法。详细目录解释configconfig是我们的配置文件,比如:数据库(mysql、oracle、redis等)OSS...实际应用:confirmgdatabase.config.js(new)database.config.jsexportdefault{database:'',username:'',password:'',dialect:'',host:'',port:3306}具体配置后,我会详细给大家讲解。modelsmodels文件夹主要是我们的数据库模型(ORM),存放数据库映射文件,eg:modelsindex.js-入口文件user.js-对应数据库中user表index.jsimportSequelizefrom'sequelize'importconfigfrom'../config/database.config'constsequelize=newSequelize(config)exportconstuser=sequelize.import(__dirname+'/user')exportdefault{user,sequelize}下面序号代表代码行号:介绍sequelize,这是一个ORM框架,后面会详细讲解它的使用。引入我们之前在config中创建的数据库配置文件。使用sequelize连接数据库并导出本地数据库映射文件供我们使用controller作为控制层,主要处理外部请求。调用服务层,整合服务返回的内容返回给调用者示例:constuser=require('../service/user')constfindAllUser=async(ctx)=>{constdata=ctx.request.bodyconstresult=awaituser.findAllUser(data)ctx.body=send({data:result})}module.exports={findAllUser}下面序号代表代码行号:获取请求体,调用服务服务层将服务返回的内容返回给调用者(send是自定义数据格式化方法)serviceservice作为服务层主要做业务逻辑处理,数据处理等,并将结果返回给controller层示例:constdb=require('../models/')constfindAllUser=async()=>{constresult=awaitdb.user.findAll()returnresult}module.exports={findAllUser}下面序号代表代码行号:获取数据库映射文件,因为需要操作数据库从数据库中查找所有用户(db.user.findAll()是sequelize中提供的查询方法)返回到controllerroutersrouter来管理我们的路由,即接口地址示例:constuser=require('../controller/user')constkoa_router=require('koa-router');constrouter=koa_router();router.post('/findAll',user.findAllUser)module.exports=router以下序号代表代码行号:引入controller层定义接口类型、地址、调用方式(post,'/findAll'',findAllUser)app.jsapp.js是我们的入口文件和主文件,我们这里介绍router中配置的路由constkoaBody=require('koa-body')Koa=require('koa'),Router=require('koa-router')router=newRouter()constuser=require('./routers/user');router.use("/user",user.routes());这样我们就可以访问:ip:port/user/findAll接口