重构及封装

重构笔记

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

```

```h

@url = http://localhost:4000

GET {{url}}/blogs HTTP/1.1

Content-Type: application/json

{

"name":"巴拉巴拉"

}

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

```

相关推荐
2501_920931703 小时前
React Native鸿蒙跨平台采用ScrollView的horizontal属性实现横向滚动实现特色游戏轮播和分类导航
javascript·react native·react.js·游戏·ecmascript·harmonyos
东东5165 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino5 小时前
图片、文件的预览
前端·javascript
嵩山小老虎6 小时前
Windows 10/11 安装 WSL2 并配置 VSCode 开发环境(C 语言 / Linux API 适用)
linux·windows·vscode
2501_920931707 小时前
React Native鸿蒙跨平台实现推箱子游戏,完成玩家移动与箱子推动,当所有箱子都被推到目标位置时,玩家获胜
javascript·react native·react.js·游戏·ecmascript·harmonyos
AI老李7 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
方也_arkling8 小时前
Element Plus主题色定制
javascript·sass
2601_949809598 小时前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
Up九五小庞8 小时前
开源埋点分析平台 ClkLog 本地部署 + Web JS 埋点测试实战--九五小庞
前端·javascript·开源
摘星编程9 小时前
React Native + OpenHarmony:UniversalLink通用链接
javascript·react native·react.js