0

koa第七章:路由管理模块(1)

 2 years ago
source link: https://xushanxiang.com/koa-routing-module.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

koa第七章:路由管理模块(1)

作者: xusx 分类: JavaScript 发布时间: 2022-03-29 23:34

我们在《 koa第四章:URL中间件koa-router和koa-bodyparser用法 》 使用了不少 router.get 、router.post 的操作方法,很明显一多就乱,这还是在没有加入其他常规业务处理逻辑的情况下。

所以,最好不要把所有代码写在一个入口文件 app.js 里面。例如,工具性的东西,我们单独的分开出来,放在一个 utils 目录中,然后通过 ctx 关联起来。

在这一章,我们新增路由管理模块,新建一个 urls 目录 存放控制器,然后这些控制器通过 app.js 的 koa-router 模块加载。通过下面的代码就一目了然了。

入口文件:app.js

const fs = require('fs');
const Koa = require('koa');
const Router =  require('koa-router');

const app = new Koa();
const router = new Router();

// 首页
app.use(async (ctx, next) => {
    if (ctx.request.path === '/') {
      ctx.response.status = 200;
      ctx.response.body = 'index';
    }
    await next();
});

// 其他页面通过 router 加载
let urls = fs.readdirSync(__dirname + '/urls');
urls.forEach((element) => {
    let module = require(__dirname + '/urls/' + element);
    /*
      urls 下面的每个文件负责一个特定的功能,分开管理
      通过 fs.readdirSync 读取 urls 目录下的所有文件名,挂载到 router 上面
      API:https://github.com/koajs/router/blob/master/API.md#nested-routers
    */
    router.use('/' + element.replace('.js', ''), module.routes(), module.allowedMethods());
});

app.use(router.routes())
.listen('3000',(err)=>{
    if(err){
        console.log('服仵器启动失败');
    }else{
        console.log('服务器启动成功');
    }
});
JavaScript

router.use('/' + element.replace('.js', ''), module.routes(), module.allowedMethods()); 的<strong>补充说明</strong>

在我们这个例子中,就是 router.use('/home', module.routes(), module.allowedMethods());

这是一个嵌套路由。下面我们把相关代码放在一起,就很明了了。

const Router =  require(‘koa-router’);

const router = new Router();

const home = new Router();

home.get(‘/’, (ctx, next) => {…});

home.get(‘/list’, (ctx, next) => {…});

// 被嵌套的模块路由 /home 作为父级路由 router 的中间件使用

router.use(‘/home’, home.routes(), home.allowedMethods());

// 响应 “/home ” and “/home/list”

app.use(router.routes());

路由管理文件:urls/home.js

const Router = require('koa-router');
const home = new Router();

// /home
home.get('/', async (ctx, next) => {
    ctx.response.status = 200;
    ctx.response.body = 'home';
    await next();
})

// home/list
home.get('/list', async (ctx, next) => {
    ctx.response.status = 200;
    ctx.response.body = 'home-list';
    await next();
})

module.exports = home;
JavaScript

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK