继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【金秋打卡】第11天 《Node.js+Koa2+MySQL 打造前后端分离精品项目》

球状闪电2012
关注TA
已关注
手记 25
粉丝 4
获赞 1

课程名称:Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》

课程章节:第3章 【让KOA更加好用】路由系统的改造

                第4章【深入浅出讲异常】异步异常与全局异常处理


视频:3-7 初始化管理器与Process.cwd

            4-1 参数获取与LinValidator校验器

课程讲师: 七月


课程内容:

//重构代码
//app.js
const Koa = require('koa')  //导入Koa
const InitManager = require('./core/init')



const app = new Koa()
InitManager.initCore(app)



app.listen(3000)
//重构代码
//init.js
const requireDirectory = require("require-directory");
const Router = require('koa-router')
class InitManager {

    //入口方法
    static initCore(app) {
        InitManager.app = app
        InitManager.initLoadRouters()  
    }

    static initLoadRouters() {
        requireDirectory(module, '../app/api', {
            visit: whenLoadModule
        })

        function whenLoadModule(obj) {
            if (obj instanceof Router) {
                InitManager.app.use(obj.routes())
            }
        }
    }
}

module.exports = InitManager


//使用绝对路径的方法

//init.js
const requireDirectory = require("require-directory");
const Router = require('koa-router')
class InitManager {

    //入口方法
    static initCore(app) {
        InitManager.app = app
        InitManager.initLoadRouters()  
    }

    static initLoadRouters() {
        const apiDirectory = `${process.cwd()}/app/api`
        requireDirectory(module, apiDirectory, {
            visit: whenLoadModule
        })

        function whenLoadModule(obj) {
            if (obj instanceof Router) {
                InitManager.app.use(obj.routes())
            }
        }
    }
}

module.exports = InitManager

上述代码中的process.cwd()可以返回当前项目的绝对路径。 然后加上app/api,就能得到api目录所在的路径了。


传参的四种方式,

  1. url路径中中传参,

  2. 在url最后的问号后传参。这是常见的两种传参形式。

  3. 在http的header传参

  4. http的body中传参

//classic.js

const Router = require('koa-router')
const router = new Router()

router.post('/v1/:id/classic/latest', (ctx, next) => {
    const path = ctx.params
    const query = ctx.request.query
    const headers = ctx.request.header
    const body = ctx.request.body
    ctx.body = {
        key: 'classic',
        path: path,
        query,
        headers,
        body
    }
})


module.exports = router

通过postman 使用post 访问  http://localhost:3000/v1/4/classic/latest?param=banana

结果为:

{
    "key": "classic",
    "path": {
        "id": "4"
    },
    "query": {
        "param": "banana"
    },
    "headers": {
        "token": "123123123",
        "content-type": "application/json",
        "user-agent": "PostmanRuntime/7.29.0",
        "accept": "*/*",
        "postman-token": "57113dad-4fb0-49c3-a4c6-7f92ff17c52d",
        "host": "localhost:3000",
        "accept-encoding": "gzip, deflate, br",
        "connection": "keep-alive",
        "content-length": "22"
    },
    "body": {
        "key": "hello world"
    }
}

//可以看到所有参数都打印出来了。


课程收获:

七月老师这节课主要是重构代码,重构代码能让项目中的文件和路径看上去更清晰,可读性强。

然后讲了“硬编码”。硬编码是指把目录路径写死在文件中,这样可扩展性不好,当项目结构变化时,需要记得找到代码位置进行修改。应该使用配置文件的方法。把路径写在配置文件中。项目文件中读取配置文件中的信息。以后改动的话,只改动配置文件就可以。第二个方法是可以使用绝对路径。


传参和获取参数,因为有其他编程语言的基础,所以这里听起来比较简单,很快就能掌握。


七月老师自己写了一个验证器。LinValidator. 下节课将详细讲解LinValidator


七月老师非常注重在讲编程知识的同时,讲编程思维,讲知识和知识之间的关系。编程是实践性非常强的工作,学习知识最好的方法是放到项目中。做项目的目的不是做项目,最终要做出来自己的项目,业务承载的是编程知识。明天继续刷后边的课程。


http://img1.sycdn.imooc.com/6363dd110001dea111410639.jpg


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP