EDU_BOOK开发概要KOA2+Mongodb整体框架构建APIKoa2是目前Node.js界最流行的web框架。无论从性能还是流程控制上,koa2及其harem(中间件)都是非常好的解决方案。本文主要讲解koa2的文档解读和runkoa的介绍,让大家对koa2有一个更简单更直接的认识。1.项目目录生成构建项目首先要明确建立文件系统目录,这样就可以清楚地放置项目的文件路径,也定义了项目的结构。项目临时文件目录如下:EDU_Book_Background/├──app├──controllers/│├──loginController.js│└──registController.js├──modules/│└──user.js├───node_mudules├─public├──routes/│├──home.js│├──index.js│├──login.js│└──regist.js├──app.js├──配置。js├──package.json├──start.js└──README.md文件目录分析:app用于存放前端JavaScriptviewtemplatecontrollers用于存放后台controllersmodulesaredataprototypespublic用于存放使用静态资源routers存储路由系统app.js为后台入口文件config.js为配置文件start.js用于es6和es7babel的转换2.koa2搭建(1)首先安装koa2的npm包:npm--save-devinstallkoa@next(2)然后安装koa的路由系统npm包:npm--save-devinstallkoa-router@next(3)安装babel的npm包,转换js语言npm--save-devinstallbabel-corebabel-polyfillbabel-preset-es2015-node6babel-preset-stage-3此时我们已经安装好了koa2框架的基本使用需求。但是我们如何在node环境下运行es6和es7的语法呢?所以我们需要写一个js脚本来转换app.js,也就是server.js文件:require('babel-core/register')({presets:['stage-3','es2015-node6']});require("babel-polyfill");require('./app.js');//确保入口文件是app.js然后每次要启动或调试程序时在cmd下运行:节点启动。js以便我们可以使用koa2编写所需的后台服务api^_^3。koa2服务的编写我们之前说过,app.js是入口文件,一起来看看吧!importKoafrom'koa'//引入koa2constapp=newKoa();app.listen(3000);console.log('appstartedatport3000...');这样就启动了Koa的服务!但这还远远不能为web提供API。我们首先需要的是路由系统。4.在构建Koa2路由系统之前已经安装了koa-router,支持koa2路由系统npm包,所以app.js变为:importKoafrom'koa'importbodyParserfrom'koa-bodyparser'//用于解析requestbodydataimportsessionfrom'koa-session'//用于session会话服务importconvertfrom'koa-convert'//koa2使用koa-session需要convertimportmongoosefrom'mongoose'//connectmongodbuseimportconfigfrom'./config'//程序配置文件importrouterfrom'./routes/index'//引入路由系统文件mongoose.connect(`mongodb://${config.mongodb.host}:${config.mongodb.port}/${config.mongodb.dbname}`);//从配置文件中加载数据连接数据库constapp=newKoa();app.keys=[config.appKey];app.use(convert(session(app)));//parserequestbody:app.use(bodyParser());//添加路由中间件:app.use(router.routes()).use(router.allowedMethods());app.listen(3000);console.log('appstartedatport3000...');接下来看主体部分,路由系统(1)主路由文件index.js://分多个文件处理路由importRouterfrom'koa-router'importhomeRouterfrom'./home'importloginRouterfrom'./login'从'./regist'constrouter=new导入registRouterRouter();//登录响应路由router.use('/login',loginRouter.routes(),loginRouter.allowedMethods());//注册响应路由router.use('/',homeRouter.routes(),homeRouter.allowedMethods());//主页响应路由router.use('/regist',registRouter.routes(),registRouter.allowedMethods());exportdefaultrouter;(2)示例登录路由文件:login.js:从'koa-router'导入路由器从'../controllers/loginController'导入登录控制器constrouter=newRouter();router.post('/',loginController.loginPost);//处理post方法的/login,调用登录管理控制器router.get('/',loginController.loginGet);//处理get方法的/loginexportdefaultrouter;控制器处理路由:loginController.jsimportUserModelfrom'../models/user'//Loaddataprototypeimport{MD5,SHA256}from'crypto-js';//引入加密方式exports.loginPost=async(ctx,next)=>{varreq=ctx.request,name=req.body.姓名,密码=SHA256(req.body.password),电子邮件=req.body.email;varresult=awaitUserModel.findOne({名字:名字,密码:password.toString(),电子邮件:电子邮件});if(result&&result._id){console.log('登录成功!!!');ctx.set('Access-Control-Allow-Origin','*');ctx.response.status=200;ctx.response.type='应用程序/json';ctx.response.body={name:姓名,password:密码,email:邮箱};}else{ctx.throw(400,'某些信息有误!');console.log('登录信息不匹配!');}}exports.loginGet=async(ctx,next)=>{ctx.response.status=200;ctx.response.body=`
登录
名称:
密码:
电子邮件: