some changes
parent
70d82d69d1
commit
b68851c862
30
main.go
30
main.go
|
@ -12,11 +12,19 @@ import (
|
|||
)
|
||||
|
||||
func main() {
|
||||
var app *models.App
|
||||
var err error
|
||||
// Инициализация конфига
|
||||
if err := models.Cfg.Load("config.json"); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Инициализация приложения
|
||||
if app, err = models.AppInit(); err != nil {
|
||||
// Загрузка постов
|
||||
if err := models_pages.LoadPosts(models.Cfg.PostsDir); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Инициализация приложения (обязательно после инициализации конфига)
|
||||
if err := models.InitApp(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
@ -24,14 +32,14 @@ func main() {
|
|||
log.SetPrefix(fmt.Sprintf("%s | ", models.Cfg.ServerDomain))
|
||||
|
||||
// Настройка маршрутов и запуск
|
||||
if setupRoutesAndRun(app) != nil {
|
||||
if setupRoutesAndRun() != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func setupRoutesAndRun(a *models.App) error {
|
||||
func setupRoutesAndRun() error {
|
||||
// Настройка маршрутов
|
||||
router := setupRoutes(a)
|
||||
router := setupRoutes()
|
||||
|
||||
// Запуск сервера
|
||||
if ok, err := tools.IsIPInUse(models.Cfg.ServerIP); err != nil {
|
||||
|
@ -46,7 +54,7 @@ func setupRoutesAndRun(a *models.App) error {
|
|||
}
|
||||
|
||||
// Настраивает маршруты
|
||||
func setupRoutes(a *models.App) *http.ServeMux {
|
||||
func setupRoutes() *http.ServeMux {
|
||||
router := http.NewServeMux()
|
||||
|
||||
// Цепочка обработчиков, которые сработают до отдачи страницы юзеру
|
||||
|
@ -58,15 +66,15 @@ func setupRoutes(a *models.App) *http.ServeMux {
|
|||
// Главные странички
|
||||
{
|
||||
// Обработка главной страницы (русская версия)
|
||||
router.Handle("/ru/", m(controllers_pages.MainRuPageHandler(a)))
|
||||
router.Handle("/ru/", m(controllers_pages.MainRuPageHandler()))
|
||||
// Обработка главной страницы
|
||||
router.Handle("/", m(controllers_pages.MainPageHandler(a)))
|
||||
router.Handle("/", m(controllers_pages.MainPageHandler()))
|
||||
// Обработка страницы со списком постов
|
||||
router.Handle("/posts/", m(controllers_pages.PostsPageHandler(a)))
|
||||
router.Handle("/posts/", m(controllers_pages.PostsPageHandler()))
|
||||
// Обработка страничек постов
|
||||
for key := range models_pages.GetPosts() {
|
||||
postLink := string(key)
|
||||
router.Handle(postLink, m(controllers_pages.PostPageHandler(a)))
|
||||
router.Handle(postLink, m(controllers_pages.PostPageHandler()))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ import (
|
|||
)
|
||||
|
||||
// Обработчик главной страницы
|
||||
func MainPageHandler(a *models.App) http.HandlerFunc {
|
||||
func MainPageHandler() http.HandlerFunc {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
var err error
|
||||
|
@ -40,7 +40,7 @@ func MainPageHandler(a *models.App) http.HandlerFunc {
|
|||
// Страничка рендерится только если ее нет в кэше
|
||||
pageData, ok := models.PagesCache.Get(models_pages.MainPageTmplName)
|
||||
if !ok {
|
||||
pageData, err = models_pages.RenderMainPage(a.Templates, a.Version)
|
||||
pageData, err = models_pages.RenderMainPage(models.App.Templates, models.App.Version)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
|
|
|
@ -7,14 +7,14 @@ import (
|
|||
)
|
||||
|
||||
// Обработчик главной страницы
|
||||
func MainRuPageHandler(a *models.App) http.HandlerFunc {
|
||||
func MainRuPageHandler() http.HandlerFunc {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
|
||||
// Страничка рендерится только если ее нет в кэше
|
||||
pageData, ok := models.PagesCache.Get(models_pages.MainRuPageTmplName)
|
||||
if !ok {
|
||||
pageData, err = models_pages.RenderMainRuPage(a.Templates, a.Version)
|
||||
pageData, err = models_pages.RenderMainRuPage(models.App.Templates, models.App.Version)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
)
|
||||
|
||||
// Обработчик главной страницы
|
||||
func PostPageHandler(a *models.App) http.HandlerFunc {
|
||||
func PostPageHandler() http.HandlerFunc {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
|
||||
|
@ -19,7 +19,7 @@ func PostPageHandler(a *models.App) http.HandlerFunc {
|
|||
|
||||
post := posts[models_pages.PostLink(r.URL.Path)]
|
||||
|
||||
pageData, err = models_pages.RenderPostPage(a.Templates, a.Version, post.Data)
|
||||
pageData, err = models_pages.RenderPostPage(models.App.Templates, models.App.Version, post.Data)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
|
|
|
@ -7,14 +7,14 @@ import (
|
|||
)
|
||||
|
||||
// Обработчик главной страницы
|
||||
func PostsPageHandler(a *models.App) http.HandlerFunc {
|
||||
func PostsPageHandler() http.HandlerFunc {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
|
||||
// Страничка рендерится только если ее нет в кэше
|
||||
pageData, ok := models.PagesCache.Get(models_pages.PostsPageTmplName)
|
||||
if !ok {
|
||||
pageData, err = models_pages.RenderPostsPage(a.Templates, a.Version)
|
||||
pageData, err = models_pages.RenderPostsPage(models.App.Templates, models.App.Version)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
|
|
|
@ -2,7 +2,6 @@ package models
|
|||
|
||||
import (
|
||||
"html/template"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
@ -10,28 +9,29 @@ import (
|
|||
)
|
||||
|
||||
// App хранит шаблоны и время запуска
|
||||
type App struct {
|
||||
type app struct {
|
||||
Templates *template.Template // Шаблоны страниц
|
||||
Version int64 // Время запуска
|
||||
}
|
||||
|
||||
var (
|
||||
App = &app{}
|
||||
)
|
||||
|
||||
// Инициализирует приложение
|
||||
func AppInit() (*App, error) {
|
||||
func InitApp() error {
|
||||
|
||||
a := &App{
|
||||
Version: time.Now().Unix(),
|
||||
App.Version = time.Now().Unix()
|
||||
|
||||
// Загрузка шаблонов
|
||||
if err := App.loadTemplates(Cfg.TemplatesDir, Cfg.TemplatesExt); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Загрузка шаблонов
|
||||
if err := a.loadTemplates(Cfg.TemplatesDir, Cfg.TemplatesExt); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
return a, nil
|
||||
}
|
||||
|
||||
// Загрузка шаблонов
|
||||
func (a *App) loadTemplates(templatesPath string, ext string) error {
|
||||
func (a *app) loadTemplates(templatesPath string, ext string) error {
|
||||
tmpls := template.New("")
|
||||
|
||||
err := filepath.Walk(templatesPath, func(path string, f os.FileInfo, err error) error {
|
||||
|
|
|
@ -2,7 +2,6 @@ package models
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
|
@ -20,16 +19,10 @@ type config struct {
|
|||
}
|
||||
|
||||
var (
|
||||
Cfg = config{}
|
||||
Cfg = &config{}
|
||||
)
|
||||
|
||||
func init() {
|
||||
if err := Cfg.load("config.json"); err != nil {
|
||||
log.Fatalf("%v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *config) load(configPath string) error {
|
||||
func (c *config) Load(configPath string) error {
|
||||
configFile, err := os.ReadFile(configPath)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -5,8 +5,6 @@ import (
|
|||
"fmt"
|
||||
"html/template"
|
||||
"io"
|
||||
"log"
|
||||
"main/mvc/models"
|
||||
"main/tools"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
@ -25,17 +23,11 @@ var (
|
|||
allPosts = posts{}
|
||||
)
|
||||
|
||||
func init() {
|
||||
if err := loadPosts(models.Cfg.PostsDir); err != nil {
|
||||
log.Fatalf("%v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func GetPosts() posts {
|
||||
return allPosts
|
||||
}
|
||||
|
||||
func loadPosts(dir string) error {
|
||||
func LoadPosts(dir string) error {
|
||||
err := filepath.Walk(dir, func(path string, f os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
# Это тестовый пост
|
||||
Этот пост был написан в файле формата .md
|
||||
[Этот](/test/) пост был *написан* в файле **формата** .md
|
||||
|
|
Loading…
Reference in New Issue