讲解用过express的都知道express入口文件只有一个app.js,很多路由配置都写在它。通常,会有一个routes文件夹,用来处理路由规则对应的数据和响应请求,而不是把所有的功能都写在app.js文件里,类似下图的结构:学习时koa2,几乎没有人提过至于如何分离不同路由规则的处理逻辑,网上的教程只是(截至目前)讲的是如何获取get,post等,这里我介绍一下如何实现类似的koa的文件结构,方便项目维护,更直观的区分项目结构关系。结果如下:入口文件:index.js可以定义自己的名字,不多说了。constKoa=require('koa');constRouter=require('koa-router');constapp=newKoa()constbodyParser=require('koa-bodyparser');constrouter=newRouter();constsession=require('koa-session');constcors=require('koa2-cors');constuserlogin=require('./routes/userlogin')constregisterNewUser=require('./routes/registerNewUser')app.use(session(app))app.use(bodyParser({enableTypes:['json','text','form']}))app.use(cors({origin:'http://localhost:3000',exposeHeaders:['WWW-Authenticate','Server-Authorization'],maxAge:5,credentials:true,allowHeaders:['Content-Type','Authorization','Accept'],}));路由器。post('/userlogin',userlogin)router.post('/registerNewUser',registerNewUser)//router.get('/post',ctx=>{//ctx.body=ctx.request.body//})app.use(async(ctx,next)=>{console.log(ctx.request.path+':'+ctx.request.method);awaitnext();});应用程序.use(router.routes()).use(router.allowedMethods())server.listen(3007)子路由文件registerNewUser.js导出一个函数(express中使用module.exports=router)module.exports=(ctx,next)=>{letregisterUser=ctx.request.body.userInfoconsole.log(registerUser)if(registerUser.new_password==registerUser.new_password1){ctx.body={registerState:'成功',msg:'注册成功'};}else{ctx.body={registerState:'error',msg:'注册失败,两个密码不对应'}}next()}同理子路由文件userlogin.js导出一个函数module.exports=asyncfunctionuserlogin(ctx,next){让loginUser=ctx.request.body.userInfoconstusers=[]letuserMatched={};for(letindexinusers){if(users[index].username==loginUser.username){userMatched=users[index]}}if(userMatched.password==loginUser.password){ctx.body={loginState:'成功',msg:'登录成功',user:userMatched};}else{ctx.body={loginState:'error',msg:'用户名或密码错误'}}next()}不是很简单
