# koa_server **Repository Path**: cybertec/koa_server ## Basic Information - **Project Name**: koa_server - **Description**: koa路由框架示例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2019-07-04 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于koa@v2的后端框架 _oo0oo_ 088888880 88" . "88 (| -_- |) 0\ = /0 ___/'---'\___ .' \\| |// '. / \\||| : |||// \ /_ ||||| -:- |||||- \ | | \\\ - /// | | | \_| ''\---/'' |_/ | \ .-\__ '-' __/-. / ___'. .' /--.--\ '. .'___ ."" '< '.___\_<|>_/___.' >' "". | | : '- \'.;'\ _ /';.'/ - ' : | | \ \ '_. \_ __\ /__ _/ .-' / / ====='-.____'.___ \_____/___.-'____.-'===== '=---=' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 : : 永无BUG quu..__ $$$b `---.__ "$$b `--. ___.---uuudP `$$b `.__.------.__ __.---' $$$$" . "$b -' `-.-' $$$" .'| ". d$" _.' | `. / ..." .' | `./ ..::-' _.' | / .:::-' .-' .' : ::''\ _.' | .' .-. .-. `. .' | : /'$$| .@"$\ `. .' _.-' .'|$u$$| |$$,$$| | < _.-' | `:$$:' :$$$$$: `. `. .-' : `"--' | `-. \ :##. == .###. `. `. `\ |##: :###: | > > |#' `..'`..' `###' x: / / \ xXX| / ./ \ xXXX'| / ./ /`-. `. / / : `- ..........., | / .' | ``:::::::' . |< `. | ``` | x| \ `.:``. | .' /' xXX| `:`M`M':. | | ; /:' xXXX'| -'MMMMM:' `. .' : /:' |-'MMMM.-' | | .' /' .'MMM.-' `'`' : ,' |MMM< | `' |tbap\ \ :MM.-' \ | .'' \. `. / / .:::::::.. : / | .:::::::::::`. / | .:::------------\ / / .'' >::' / `',: : .' `:.:' ┌─┐ ┌─┐ ┌──┘ ┴───────┘ ┴──┐ │ │ │ ─── │ │ ─┬┘ └┬─ │ │ │ │ ─┴─ │ │ │ └───┐ ┌───┘ │ │ │ │ │ │ │ └──────────────┐ │ │ │ ├─┐ │ ┌─┘ │ │ └─┐ ┐ ┌───────┬──┐ ┌──┘ │ ─┤ ─┤ │ ─┤ ─┤ └──┴──┘ └──┴──┘ 神兽保佑 代码无BUG! ####工具包 主要用于处理数据操作和一些常用的封装方法 所有工具文件都放在/tools/文件夹下,以.t.js结尾区分 工具包包括了mongodb的封装,bmob短信模块,七牛云存储等 ####类文件 类文件放在/class/文件夹下,不同作用的类模块分在了不同的文件夹下 具体类文件书写请参照文件夹中的任意案例 ####接口文件 接口文件放在/complex/interface/文件夹下,不同作用的接口文件被放在不同的文件夹下 ####接口书写说明 一个接口文件主要包含prefix和method prefix作为接口地址的前缀 method为客户端发送请求的方法,包括[post,get,put,delete] method中书写具体的接口内容,key作为主要的接口后缀 每一个接口内容都包括des,method两个字段 des为接口的主要说明,包含name(接口名称)、content(接口中文说明)、parmas(Array,接口涉及参数) parmas是一个json数组,每一个元素包含key(字段名)和type(数据类型)字段 Example: example.r.js ```javascript module.exports={ prefix:"/example/" //接口地址前缀 get:{ "name/:name":{ des:{ name:"getName", //接口名称 content:"获取名字", //接口描述 params:[ //参数集合 { params:"name", //params参数 type:"string" //参数类型 }, { key:"key", //query参数 type:"string" } ] }, method:function*(){ var name=this.params.name; //获取params参数name var query=this.request.query; //获取query参数,json this.body=name; //向客户端返回数据 } } } } ``` ####接口的路由注册 接口的注册方法放在/complex/complex.js中 通过遍历/complex/interface/文件夹下的层级接口,遍历出所有接口文件并逐一注册接口事件 具体注册方式请参照文件中的readFiles方法 路由接口注册之后,最后在/server/index.js中绑定到后台端口上 ####客户端发送的数据 body中的数据格式必须是x-www-form-urlencoded,格式介绍请参照网络文档 获取body中的数据,data是一个json: ```javascript var data=yield parse(this.request) ``` url中的parmas获取,url中'?'后面中的数据 ```javascript var data=this.request.query ``` 在注册接口的时候,一个接口名称的后面如果接着/:key,key可以作为特殊参数传送,key的获取 ```javascript key=this.parmas.key ``` 一些特殊情况需要用到form-data数据传输,比如上传文件, 处理这类数据的接口需要单独书写,并使用特殊的中间件做数据处理 koa-body可以处理body中的form-data数据,但此功能默认是不开启的, 需要在创建koa-body中间件的时候加入option:{multipart:true}才能处理form-data 处理form-data的接口,需要在des和method之间加入字段multipart:ture, 这样路由在注册接口的时候会为这个接口加上koa-body用来处理form-data form-data获取文件数据 ```javascript data=this.request.body.files ``` ####session 通过注册koa-session中间件实现,主要用于保持客户端服务端通讯数据保留 比如在一个会话中,在服务端保留user对象: ```javascript this.session.user=_obj ``` ####用到一些node自带的全局变量 __dirname: 当前文件所处路径; __filename: 当前执行操作的文件名,包含完整路径 require: node用于加载模块的方法 ####基本说明 后台用到了大量的异步和同步混合操作,理解co和Promise的运行机制是使用本框架的基本要点之一 #所有接口的获取 所有的接口最后都会整合到一个数组中,并单独注册到/allApis接口上,获取接口的详细内容只要访问该方法即可