当前位置: 首页 > news >正文

重构及封装

## 重构笔记

- 关键代码

1. app.js

```js

import koa from "koa"

import router from "koa-router"

import bodyparser from "koa-bodyparser"

import { route } from "./router/index.js"

const app = new koa()

const Router = new router()

app.use(bodyparser())

// 找到并遍历所有指定路径下的js文件

app.use(route)

app.listen(4000)

```

2. books.js

```js

let list = async(ctx,next) =>{

    console.log('图书列表');

    ctx.body = '图书列表'

}

let list_Id = async(ctx,next) =>{

    let Id = ctx.params.Id

    ctx.body = '单个图书'

}

let list_add = async(ctx,next) =>{

    ctx.body = '新增图书'

}

let list_update = async(ctx,next) =>{

    let Id = ctx.params.Id

    ctx.body = '修改图书'

}

let list_del = async(ctx,next) =>{

    ctx.body = '删除'

}

export const obj = {

    'get /books' : list,

    'get /books/:id' :list_Id,

    'post /books/' : list_add,

    'put /books/:id' : list_update,

    'delete /books' : list_del

}

```

3. router/index.js

```js

import Router from "koa-router"

import path from "path"

import {FAllCon,Reg} from "./utils.js"

let router =new Router()

/*

    1. 注册路由【通过两个函数】【把 router 传进去】

    2. 使用app.use(Router.routes())

*/

// 传路径

let dir = '../Controller'


 

// 找到所有的控制器文件

let controllers = FAllCon(dir)


 

// 注册路由

Reg(router,controllers)




 

/*

1. 具名导出

    export let abc      // import {abc} from ''

2. deefault {} 全场只能出现一个 default

    export default {}   // import x from ''

*/

export let route = router.routes();

```

4. router/utils.js

```js

import { log } from 'console';

import fs from 'fs'

import path from "path"

// 找到所有的控制器文件

function findAllControllers(ConDir){

    // 使用绝对路径

    const ab = `F:/123/28/Controller`

    let aaa = fs.readdirSync(ab)

    console.log(aaa);

   

    if (fs.existsSync(ab)) {

        let allFile = fs.readdirSync(ab)

        let allConFiles = allFile.filter(x=>x.endsWith('.js')).map(x=>`file:///${ab}/${x}`)

        return allConFiles

    }

}

// 注册路由

function regRouter(router,controllers){

    // 遍历所有的控制器,动态导入每个控制器模块

    controllers.forEach(async file => {

        // 动态导入模块

        let {obj} = await import(file)

        // 遍历对象

        for (const key in obj) {

            let x = key.split(' ')

            console.log(x);

            let [keyMethod,keyPath] = key.split(' ')

            let keyFn = obj[key]

            console.log(keyMethod);

           

            if (keyMethod === 'get') {

                router.get(keyPath,keyFn)

            }

            if (keyMethod === 'post') {

                router.post(keyPath,keyFn)

            }

            if (keyMethod === 'delete') {

                router.delete(keyPath,keyFn)

            }

            if (keyMethod === 'put') {

                router.put(keyPath,keyFn)

            }

        }

    });

}

export const FAllCon = findAllControllers

export const Reg = regRouter

```

5.

```h

    @url = http://localhost:4000

    ###

    GET {{url}}/blogs HTTP/1.1

    Content-Type: application/json

    {

        "name":"巴拉巴拉"

    }

    ###

    get {{url}}/blogs/:id HTTP/1.1

```

相关文章:

  • 【高并发】高速将图片提交到flask、fastapi等主流服务框架
  • 【学习笔记】【AI医生】2-4 项目详细分析及DeepSeek适用场景
  • QT系列教程(18) MVC结构之QItemSelectionModel模型介绍
  • 使用 MyBatis-Plus 实现数据库的多租户管理
  • NineData 社区版正式上线,支持一键本地化部署
  • Git前言(版本控制)
  • 深度学习系列79:Text2sql调研
  • LiveCommunicationKit OC 实现
  • Java开发者如何接入并使用DeepSeek
  • 【设计模式】掌握建造者模式:如何优雅地解决复杂对象创建难题?
  • 【JavaWeb学习Day23】
  • 网络-五大拓扑结构
  • 设计模式之建造者模式:原理、实现与应用
  • P8683 [蓝桥杯 2019 省 B] 后缀表达式
  • 鸿蒙应用开发—数据持久化之SQLite
  • 数据库SQL的配置和练习题
  • 科技的成就(六十七)
  • 从 MongoDB 到 TDengine,沃太能源实现 18 倍写入性能提升
  • socket描述符的本质,它可以和服务器建立连接?一个服务器和一个客户端的通信中,三个操作符的作用分别是什么?
  • 【基于C#实现Bartender多条码打印的示例】
  • 人民日报:莫让“假自杀”淹没“真求助”
  • 中方对美俄领导人就俄乌冲突进行通话有何评论?外交部回应
  • 在越剧之乡嵊州,浙江音乐学院越剧学院成立
  • 俄美元首通话超2小时,普京称愿与乌方共同起草和平备忘录
  • 大学2025丨北大教授陈平原:当卷不过AI时,何处是归途
  • 看展 | 黄永玉新作展,感受赤子般的生命力