这是我参与「第五届青训营」伴学笔记创作活动的第15天。本篇为第五届字节跳动青训营-寒假专场-后端基础班大项目“极简版抖音”的相关分析内容。
项目要求
已有前端app的情况下,根据提示设置好地址即可使用。windows用户可使用安卓模拟器,使用10.0.2.2地址,即可访问本机服务器。
本次大项目“极简版抖音”的完成思路分为:前端设置(按照提示),连接数据库,根据给定的接口文档完成相关接口。
数据库连接
需要安装mysql,mysql可视化操作可使用workbench或者navicat。首先要在本地建立数据库,确保知道本地数据库的账号密码。相关操作不再赘述。
本地数据库建立后,首先进行数据库连接。使用gorm框架即可完成,如下所示。
// 获取配置参数数据
func (c *conf) getConf() *conf {
//读取resources/application.yaml文件
yamlFile, err := os.ReadFile("resources/application.yaml")
//若出现错误,打印错误提示
if err != nil {
fmt.Println(err.Error())
}
//将读取的字符串转换成结构体conf
err = yaml.Unmarshal(yamlFile, c)
if err != nil {
fmt.Println(err.Error())
}
return c
}
// 初始化连接数据库,生成可操作基本增删改查结构的变量
func InitMySql() (err error) {
var c conf
//获取yaml配置参数
conf := c.getConf()
//将yaml配置参数拼接成连接数据库的url
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
conf.UserName,
conf.Password,
conf.Url,
conf.Port,
conf.DbName,
)
//连接数据库
SqlSession, err = gorm.Open(DRIVER, dsn)
if err != nil {
panic(err)
}
//验证数据库连接是否成功,若成功,则无异常
return SqlSession.DB().Ping()
}
// 关闭数据库连接
func Close() {
SqlSession.Close()
}
数据库相关的配置存储在application.yaml文件中。
可对项目整体结构分层,controller(路由控制器)、service(控制器所采用的相关服务,一般涉及数据库操作等)、entity/model(数据库建表)、dao(数据库连接)、middleware(中间件)。
使用dao.SqlSession.AutoMigrate(&entity.User{})即可完成users表的创建。
接口
相关接口的编写,根据接口文档来写即可,基本都是数据库的curd操作。
本地文件存储
在投稿接口中,因为前端没有发送含“图片/封面”文件的请求,因此需要从视频中截取封面,需要用到FFmpeg库,windows用户使用这个可能会需要管理员模式启动goland或vscode。按照正常情况,应该不会由后端去处理封面,而是前端给用户提供自定义封面的选择。
其次是本地文件的存储地址,实际的物理地址是“项目目录/public/”,但在存储playurl时需要设置为static,这在r.Static("/static", "./public")中进行设置。
不需要将视频转换成二进制流存储在数据库中,按照接口文档的说明存储到本地,提供地址即可。