重构及封装

重构笔记

  • 关键代码
  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)

```

  1. 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

}

```

  1. 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 ''

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

export default {} // import x from ''

*/

export let route = router.routes();

```

  1. 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 = objkey

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

```

```h

@url = http://localhost:4000

GET {{url}}/blogs HTTP/1.1

Content-Type: application/json

{

"name":"巴拉巴拉"

}

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

```

相关推荐
大家的林语冰39 分钟前
👉 尤雨溪再次成立新公司,同时官宣 Pinia 4 正式发布!
前端·javascript·vue.js
用户938515635071 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战(二)
前端·javascript·typescript
BD_Marathon2 小时前
部署Spark
大数据·javascript·spark
gis开发之家2 小时前
《Vue3 从入门到大神50篇》Vue3 源码详解(二十):生命周期钩子源码解析 —— onMounted / onUpdated 如何实现?
前端·javascript·前端框架·vue3·vue3源码
全栈项目管理程序猿2 小时前
ArcGIS JS 基础教程(9):天空盒与大气效果
javascript
平凡的阿泽2 小时前
我用TRAE Work手搓了一个「谁是卧底」小游戏
前端·javascript
Highcharts2 小时前
Highcharts 实战:基于 Gauge 仪表盘打造实时动态时钟可视化开发全解析
javascript·数据可视化
嘟嘟07173 小时前
用单例模式管理弹窗:从一段原生 JS 理解 Singlet
前端·javascript·代码规范
广东程序猿小展3 小时前
《007初露锋芒》风灵月影13项修改器下载 007初露锋芒修改器使用方法
开发语言·javascript·ecmascript
用户6919026813393 小时前
Harness工程的概念,以及简单的代码示例
javascript·架构