重构及封装

重构笔记

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

```

相关推荐
jktantan44 分钟前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
guoran_shini1 小时前
AI开发与AI重构
重构·spec·持续迭代
隔窗听雨眠1 小时前
从近端策略优化到群组相对策略优化:DeepSeek大模型强化学习训练范式重构
重构
我命由我123451 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
海域云SeaArea_2 小时前
Windows Server 2008 R2 从零安装 IIS7.5(二):php.ini 配置
开发语言·windows·php
程序员大阳2 小时前
副队长JavaScript教程(65)-详解JSON:轻量级数据交换格式
javascript·json·序列化·反序列化·stringify·parse
paopaokaka_luck4 小时前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts
sxgzzn4 小时前
如何利用无人机提升光伏巡检效率?
运维·重构·无人机·开关柜局放在线监测·光伏运维管理系统
栀椩4 小时前
Electron 内嵌页面跨域问题(CORS/PNA)解决全记录
前端·javascript·electron
SEO_juper4 小时前
Chrome 扩展一键查看当前页面 SEO 信息:不用切页面,点一下全出来
前端·javascript·chrome