【金秋打卡】第11天 《Node.js+Koa2+MySQL 打造前后端分離精品項目》
课程名称: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目录所在的路径了。
传参的四种方式,
url路径中中传参,
在url最后的问号后传参。这是常见的两种传参形式。
在http的header传参
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
七月老师非常注重在讲编程知识的同时,讲编程思维,讲知识和知识之间的关系。编程是实践性非常强的工作,学习知识最好的方法是放到项目中。做项目的目的不是做项目,最终要做出来自己的项目,业务承载的是编程知识。明天继续刷后边的课程。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
