搞一个自娱自乐的博客(二) 架构搭建
搭建基础架构
目录结构
conf 配置文件
logs 日志文件
controllers 控制器 接受参数 api的入口
datasource 数据库配置
models 结构体模型
repo 数据库的操作
route 注册路由
service 业务逻辑代码
utils 工具类
config.json 配置文件的映射
main.go 主程序入口
热启动
改动内容自动重启 速度快
go get -u github.com/kataras/rizla
rizla main.go
修改main.go
日志输出到本地
func newLogFile() *os.File {
//20060102是语法糖 为yyyyMMdd
filename := "logs/" + time.Now().Format("20060102") + ".log"
// 打开以当前日期为文件名的文件(不存在则创建文件,存在则追加内容)
f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
return f
}
main.go中增加
func main() {
f := newLogFile()
defer f.Close()
app := iris.New()
// 在控制台输出同时,会被写入日志文件
app.Logger().SetOutput(io.MultiWriter(f, os.Stdout))
// 不在控制台输出 只写入日志文件
//app.Logger().SetOutput(f)
// 设置日志级别
app.Logger().SetLevel("debug")
// 添加中间件
app.Use(recover.New())
app.Use(logger.New(
logger.Config{
// 是否记录状态码,默认false
Status: true,
// 是否记录远程IP地址,默认false
IP: true,
// 是否呈现HTTP谓词,默认false
Method: true,
// 是否记录请求路径,默认true
Path: true,
// 是否开启查询追加,默认false
Query: true,
}))
...
注册template
在main.go 的main() 方法中添加如下代码
// 注册静态模版
html := iris.HTML("./web/views/", ".html").Reload(true)
// 注册HTML
app.RegisterView(html)
// 注册静态资源
app.HandleDir("/assets", iris.Dir("./web/assets"))
注册404和500错误
在main.go 的main() 方法中添加如下代码
app.OnErrorCode(iris.StatusNotFound, notFound)
app.OnErrorCode(iris.StatusInternalServerError, internalServerError)
func代码如下
func notFound(ctx iris.Context) {
// 出现 404 的时候,就跳转到 $views_dir/errors/404.html 模板
err := ctx.View("errors/404.html")
if err != nil {
return
}
}
func internalServerError(ctx iris.Context) {
_, err := ctx.WriteString("出现问题,请重试")
if err != nil {
return
}
}
修改app启动方式
// 启动服务
err := app.Run(
iris.Addr(":8080"), // 地址
iris.WithCharset("UTF-8"), // 国际化
iris.WithOptimizations, // 自动优化
iris.WithoutServerError(iris.ErrServerClosed), // 忽略框架错误
)
// 输出错误信息
if err != nil {
log.Println(err.Error())
panic(err.Error())
}
基本配置完成 修改后完整main.go如下
package main
import (
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/logger"
"github.com/kataras/iris/v12/middleware/recover"
"io"
"log"
"myCommunity/route"
"myCommunity/utils"
"os"
"time"
)
func main() {
f := newLogFile()
defer f.Close()
app := iris.New()
// 在控制台输出同时,会被写入日志文件
app.Logger().SetOutput(io.MultiWriter(f, os.Stdout))
// 不在控制台输出 只写入日志文件
//app.Logger().SetOutput(f)
// 设置日志级别
app.Logger().SetLevel("debug")
// 添加中间件
app.Use(recover.New())
app.Use(logger.New(
logger.Config{
// 是否记录状态码,默认false
Status: true,
// 是否记录远程IP地址,默认false
IP: true,
// 是否呈现HTTP谓词,默认false
Method: true,
// 是否记录请求路径,默认true
Path: true,
// 是否开启查询追加,默认false
Query: true,
}))
app.OnErrorCode(iris.StatusNotFound, notFound)
app.OnErrorCode(iris.StatusInternalServerError, internalServerError)
// 注册静态模版
html := iris.HTML("./web/views/", ".html").Reload(true)
// 注册HTML
app.RegisterView(html)
// 注册静态资源
app.HandleDir("/assets", iris.Dir("./web/assets"))
// GET方法 返回一个 Welcome
app.Handle("GET", "/", func(ctx iris.Context) {
ctx.HTML("<h1>Welcome</h1>")
})
// 启动服务
err := app.Run(
iris.Addr(":8080"), // 地址
iris.WithCharset("UTF-8"), // 国际化
iris.WithOptimizations, // 自动优化
iris.WithoutServerError(iris.ErrServerClosed), // 忽略框架错误
)
// 输出错误信息
if err != nil {
log.Println(err.Error())
panic(err.Error())
}
}
func notFound(ctx iris.Context) {
// 出现 404 的时候,就跳转到 $views_dir/errors/404.html 模板
err := ctx.View("errors/404.html")
if err != nil {
return
}
}
func internalServerError(ctx iris.Context) {
_, err := ctx.WriteString("出现问题,请重试")
if err != nil {
return
}
}
func newLogFile() *os.File {
filename := "logs/" + time.Now().Format("20060102") + ".log"
// 打开以当前日期为文件名的文件(不存在则创建文件,存在则追加内容)
f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
return f
}
前端模板选择
感谢:https://www.yanshisan.cn/
开源代码地址:https://gitee.com/yssgit/yan_shisan_blog_template
本项目用到模板中 博客、留言、日记、友链模块
将源代码下载下来 将html 和静态文件进行拆分结构如下
web
|-assets
| |-css
| |-font
| |-font-awesome
| |-image
| |-js
| |-layui
|-views
| |-errors
| |-public
差不多这样 下一篇开始根据前端模板创建数据库和结构体
推荐阅读
搞一个自娱自乐的博客(四) 友链
功能描述将首页改造为友链,功能包含链接标题和链接 因为后台管理系统还没选好 暂时不做添加功能 由数据库添加数据,页面做展示使用。后台代码modelstitle 标题结构体 {代码...} link 存放具体链接 {代码...} rep...
maoxian阅读 709
手把手教你写一份优质的前端技术简历
不知不觉一年一度的秋招又来了,你收获了哪些大厂的面试邀约,又拿了多少offer呢?你身边是不是有挺多人技术比你差,但是却拿到了很多大厂的offer呢?其实,要想面试拿offer,首先要过得了简历那一关。如果一份简...
tonychen赞 152阅读 17.9k评论 5
正则表达式实例
收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。常用正则表达式实例1. 校验基本日期格式 {代码...} {代码...} 2. 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊...
寒青赞 56阅读 8.5k评论 11
JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...
jenemy赞 49阅读 7.2k评论 12
从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...
乌柏木赞 75阅读 7.2k评论 16
再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...
libinfs赞 42阅读 6.9k评论 12
CSS 绘制一只思否猫
欢迎关注我的公众号:前端侦探练习 CSS 有一个比较有趣的方式,就是发挥想象,绘制各式各样的图案,比如来绘制一只思否猫?思否猫,SegmentFault 思否的吉祥物,是一只独一无二、特立独行、热爱自由的(>^ω^<...
XboxYan赞 47阅读 3.3k评论 14
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。