说明

  • 用过express的都知道express入口文件只有一个app.js,里面写好了很多路由配置,通常情况下,会有一个routes文件夹,用来对对应路由规则的数据进行处理,响应请求,而不是将所有的功能写在app.js文件中,类似下图结构:

问题

  • 在学习koa2时,几乎没有人提到怎么将不同路由规则的处理逻辑分开,网上的教程只是(截至目前)讲怎么获取get,post等,这里给大家介绍如何实现koa的类似文件结构,便于项目的维护和更加直观的分辨项目结构关系。结果如下图:


入口文件:index.js可自行定义名字,不多说。


const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa()
const bodyParser = require('koa-bodyparser');
const router = new Router();
const session = require('koa-session');
const cors = require('koa2-cors');
const userlogin=require('./routes/userlogin')
const registerNewUser=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'],}));router.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);await next();
});app.use(router.routes()).use(router.allowedMethods())server.listen(3007)

子路由文件registerNewUser.js export一个函数(在express中使用的是module.exports=router)

module.exports=(ctx,next)=>{let registerUser=ctx.request.body.userInfoconsole.log(registerUser)if(registerUser.new_password==registerUser.new_password1){ctx.body={registerState:'success',msg:'注册成功'};}else{ctx.body={registerState:'error',msg:'注册失败,两次密码不对应'}}next()
}

同样的,子路由文件userlogin.js export一个函数

module.exports= async function userlogin(ctx,next) {let loginUser=ctx.request.body.userInfoconst users=[]let userMatched={};for(let index in users){if(users[index].username==loginUser.username){userMatched=users[index]}}if(userMatched.password==loginUser.password){ctx.body={loginState:'success',msg:'登陆成功',user:userMatched};}else{ctx.body={loginState:'error',msg:'用户名或密码错误'}}next()
}

是不是很简单。

KOA2路由koa-router实现类似express router的文件结构设计---KOA入门学习相关推荐

  1. Nodejs 路由封装 封装一个类似 express 的路由

    1.模块化的方式封装 routes.js: const http = require('http'); const fs = require('fs'); const path = require(' ...

  2. 探讨Express Router Route

    Express 基于 Node.js 平台,快速.开放.极简的 web 开发框架 安装 //应用生成器工具 npm install express-generator -g//创建express应用包 ...

  3. node --- 使用express.Router与body-parser

    express框架提供了一个Router方法,用于监听路由 // 命令行(windows*64) npm install express --save // router.js const expre ...

  4. 当使用this.$router.back()或者this.$router.go(-1)返回上一页时,搭配组件内路由守卫,屏幕闪烁和跳转页面错误问题

    当使用this.$router.back()或者this.$router.go(-1)返回上一页时,搭配组件内路由守卫,屏幕闪烁和跳转页面错误问题 问题描述:项目有这个需求,当页面的输入框内容填完之后 ...

  5. vue router name命名规范_超完整的Vue入门指导

    脚本之家 你与百万开发者在一起 作者 | kiba518出品 | 脚本之家(ID:jb51net)前言 新建项目近些年前端开发快速发展,现在学习前端已经不像以前那样仅仅学习一个语法就可以了,它已经是一 ...

  6. express路由子路由器_使用Express在Node中构建您的第一个路由器

    express路由子路由器 本文最初发布在Okta开发人员博客上 . 感谢您支持使SitePoint成为可能的合作伙伴. 如果最近几年您使用Node进行过任何Web开发,那么您可能已经使用过Expre ...

  7. this.$router.go()和this.$router.push()的区别

    this.router.go()和this.router.go()和this.$router.replace的差别 this.$router.go(val) 介绍: 在history记录中前进或者后退 ...

  8. 前端笔记(11) Vue3 Router 编程式导航 router.push router.replace

    什么是编程式导航? 在上篇博客Vue3 Router 监听路由参数变化中,我们使用 <router-link> 创建 a 标签来定义导航链接: <router-link to=&qu ...

  9. vue router html模板,vue.router

    一.安装vue-router vue-router是一个插件包,所以我们还是需要用npm来进行安装的.打开命令行工具,进入你的项目目录,输入下面命令.npm install vue-router -- ...

最新文章

  1. Android中的eventBus传值
  2. SCAU 1078 破密
  3. ios开发ocr识别_车牌识别技术
  4. 中国工程师最喜欢的10大WiFi物联网芯片
  5. 【计算机网络复习 数据链路层】3.6.2 以太网
  6. android 判断当前窗口,Android判断当前界面是否是home界面
  7. 服务器排序规修改办法,WordPress手动修改文章排列顺序摆脱按发布时间升降序排列...
  8. 索引 | ggplot2基础语法系列推文汇总
  9. 一些and知识 和ui
  10. Activiti6详细教程
  11. Android系统模块编译Makefile编写规则
  12. https://github.com/qiangqiang666/demo
  13. 关于论文写作中的人名缩写问题
  14. 链游Farmers World【农民世界】爆火,发布一个免费开源的辅助挂机脚本
  15. uip-udp-demo分析---基于contiki
  16. Centos7.3-Oracle11g数据库静默部署
  17. 7zip自带hash校验功能
  18. pta 藏头诗(C语言实现)
  19. 数字孪生技术(数字化双胞胎)
  20. 4星|《职场老手的情绪管理法》:生活中的10%是由发生在你身上的事情组成,而另外的90%则是由你对所发生的事情如何反应所决定...

热门文章

  1. php获取文件名称和扩展名
  2. 管理表空间和数据文件——维护表空间——改变表空间的读写状态和改变表空间名称...
  3. JavaScript 方法传参
  4. 女儿社交媒体求生日卡 美96岁失明二战老兵收海量祝福
  5. 溃不成军:科通芯城一度再跌近30% 股价三天腰斩
  6. OpenStack社区正式接受UnitedStack有云Steth项目
  7. install tabix/bgzip
  8. 认识登录控件(Login、CreateUserWizard、LoginStatus和LoginName)
  9. XCode 学习技巧之 User Scripts
  10. Apache Web服务器资源使用限制配置