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

说明

  • 用过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.userInfo
    console.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.userInfo
    const 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()
}

是不是很简单。

弱鸡全栈攻城狮

2k 声望
4.6k 粉丝
0 条评论
推荐阅读
复杂场景下的h5与小程序通信
在套壳小程序盛行的当下, h5调用小程序能力来打破业务边界已成为家常便饭,h5与小程序的结合,极大地拓展了h5的能力边界,丰富了h5的功能。使许多以往纯h5只能想想或者实现难度极大的功能变得轻松简单。但在套壳...

懒懒的技术宅16阅读 3k评论 5

反编译微信小程序获取小程序前端源码wxapkg
研究反编译的原因就是我自己辛苦了半个月写的小程序,忘记备份放在桌面,心急体验Win11系统 重装系统忘记备份源码,后悔莫及。 后来网上找了反编译的教程,反编译已经上线了的小程序 于是自己尝试了一下,真的可...

TANKING13阅读 10.1k评论 7

封面图
Just for fun——C#应用和Nodejs通讯
进程通信常见的进程通讯的方法有:管道(Pipe)命名管道信号消息队列其他管道是比较简单基础的技术了,所以看看它。Node IPC支持Node官方文档中Net模块写着:IPC SupportThe net module supports IPC with named ...

pigLoveRabbit3阅读 6.8k评论 2

「过程详解」async await综合题
如果你之前跟我一样一直对async await熟悉又陌生的话(熟悉是可能每天都在用,陌生是针对一些组合题又丈二和尚摸不着头脑),不妨可以边看边练,总结规律,相信会逐渐清晰并有所得。本文对每个案例都详细描述了代...

wuwhs5阅读 1.3k

封面图
cligetter|一款快速生成 Cli工具 开发模版的脚手架
近年来 cli工具 的开发,对于不断发展的前端生态来说,似乎也逐渐成为工程师们的必备技能。其实开发一个 cli工具 并不难,但对于前端的同学可能存在一点认知上的小门槛,特别是对于刚开始接触 cli 脚手架工具开发...

木木剑光3阅读 674

一个灵活的 Node.js 多功能爬虫库 —— x-crawl
x-crawl · x-crawl 是一个灵活的 Node.js 多功能爬虫库。灵活的使用方式和众多的功能可以帮助您快速、安全、稳定地爬取页面、接口以及文件。如果你也喜欢 x-crawl ,可以给 x-crawl 存储库 点个 star 支持一下,...

coderhxl2阅读 2k评论 2

封面图
从零打造你的前端开发脚手架
在实际开发过程中,我们经常都会用到脚手架来构建前端工程项目,常见的主流框架都有自己的脚手架,vue-cli、create-react-app、angular-cli。在大型公司都会有内部定制化的脚手架开发工具,使用脚手架可以大幅提...

南城FE2阅读 3.1k

封面图

弱鸡全栈攻城狮

2k 声望
4.6k 粉丝
宣传栏