重构及封装

## 重构笔记

- 关键代码

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

```

你可能感兴趣的:(重构,windows,javascript)