从0解构tinyWeb项目--(Day:6)

0 阅读3分钟

今日目标

image.png 前面的主要一下调用顺序,重点理解startServer函数

今日内容

config.go

image.png

这里测试库和主库的配置都是统一结构

image.png 然后通过 var appConfig *AppConfig 这里创建一个结构体指针然后赋值给全局变量appConfig

然后就到load

image.png

通过getEnv函数取得对应的环境变量,如果没有就默认后面的localhost,root等等

db.Initialize()和db.InitializeTestDB()

image.png

同样让结构体指针赋值给两个库的变量名

image.png

这里db包就是连接数据库

testVisitStats()

这里是main包里测试数据库的函数

image.png

startServer(重点)

image.png

startServer函数是http服务器启动函数,负责注册所有api接口并启动服务器

这里先rootDir:=config.GetStaticDir()获取环境变量给rootDir,环境变量这里是我们自己设置的

存储的就是index的目录,它的目的就是为了找到index所在的目录,因为当前的目录不一定就是index的目录,比如我这里就是数据库server是当前目录,如果没有设置环境变量就找到前端文件了

后面的if条件就是如果没有配置环境变量的情况

那么这里是需要给rootDir重新赋值,而且有错误返回值所以不能:=直接声明赋值,因为会重新声明一个新的rootDir变量就不是单纯重新赋值了,所以我们先定义 var err error,然后后面就直接通过os.Getwd()赋值当前工作目录

别忘了错误处理,当err!=nil时

image.png

接下来创建路由器,路由器本质就是map【string】(Handler),一个url路径对应一个处理函数,

image.png

然后后面就是一些具体的接口

健康检查与访问统计接口

image.png 首先?HandleFunc的作用就是往路由表里添加一条记录

健康检查接口就是检查服务器和数据库是否正常运行的函数

这里访问统计接口内部判断访问的请求类型post和get然后执行不同的处理函数,如果method是其他的那么就会sendMethodNotAllowed(w),相当于返回方法错误。

jwt中间件

image.png

在需要登录才能使用的接口中就会使用middlewarr.AuthMiddleware这样的中间件处理

它就是在识别路由到对应函数开始处理之间加了一道限制,检查你有没有jwt有效的token(是否登录,登录信息是否正确,就像安保系统人脸识别)

image.png

每一个需要登录才能使用的接口都会加上这样一道限制

静态文件兜底路由

image.png 那么这里fs就成了一个提供静态文件的处理函数,rootDir是静态文件初春的地方http.Dir()将字符转化成http.Dir类型,http.FileServer()创建服务器handler

当没有url路径对应时就交给index.html处理

image.png

image.png 这里handle的传参不一样,注意这里不是HandleFunc

启动HTTP服务

image.png

这里addr是对应的端口地址如:8080,corsMiddleware(mux)是一个中间件

允许前端调用api,访问接口,是后端给浏览器的通行证

这里的http.ListenAndServe就是启动服务器监听接口的函数,这个函数阻塞,一旦开始就会卡着然后等待发来请求,实现了监听别人来访问,

这里如果函数启动错误才会有返回值,那么这里给到err,错误就打印错误信息

练习

写一个最简http服务器

联想截图_20260422122312.jpg

联想截图_20260422122258.jpg

加一个json返回的接口

联想截图_20260422135512.jpg

联想截图_20260422135654.jpg