diff --git a/app/views/test2.html b/app/views/test2.html new file mode 100644 index 0000000..9089b9e --- /dev/null +++ b/app/views/test2.html @@ -0,0 +1,6 @@ +test of test {{.value}} +
+ {{range .items}} +

{{.}}

+ {{end}} +
\ No newline at end of file diff --git a/fiber/init.go b/fiber/init.go index 8121d49..f64cae1 100644 --- a/fiber/init.go +++ b/fiber/init.go @@ -3,14 +3,16 @@ package fiber import ( "fmt" _ "github.com/go-sql-driver/mysql" // для связи с mysql + "github.com/gofiber/fiber/v2/middleware/logger" "github.com/jmoiron/sqlx" + "net/http" "os" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/compress" "github.com/gofiber/fiber/v2/middleware/cors" "github.com/gofiber/fiber/v2/middleware/favicon" - "github.com/gofiber/fiber/v2/middleware/logger" + "github.com/gofiber/template/html/v2" ) type App struct { @@ -20,6 +22,7 @@ type App struct { } type StringHandler func(db *sqlx.DB, query string) string +type HTMLHandler func(db *sqlx.DB, query string) map[string]interface{} func OpenDB(database string) *sqlx.DB { // fmt.Printf("открываю БД nano-svelte\n") @@ -32,13 +35,26 @@ func OpenDB(database string) *sqlx.DB { } func NewApp(name string, db *sqlx.DB) *App { + // Create a new engine + //engine := html.New("./app/views", ".html") + engine := html.NewFileSystem(http.Dir("./app/views"), ".html") + + engine.Reload(true) // Optional. Default: false + // Debug will print each template that is parsed, good for debugging + engine.Debug(true) // Optional. Default: false + // инициализация fiber - app := fiber.New() + app := fiber.New(fiber.Config{ + Views: engine, + }) + + // midlleware app.Use(logger.New()) app.Use(cors.New()) app.Use(favicon.New()) app.Use(compress.New()) + // static app.Static("/", "app/dist/index.html") app.Static("/assets", "app/dist/assets", fiber.Static{ Compress: true, @@ -70,9 +86,17 @@ func (app *App) JSONRouter(name string, funcRouter StringHandler) { }) }) } + func (app *App) StringRouter(name string, funcRouter StringHandler) { app.fiber.Get(name, func(ctx *fiber.Ctx) error { q := ctx.Query("q", "") return ctx.SendString(funcRouter(app.db, q)) }) } + +func (app *App) HTMLRouter(name string, funcRouter HTMLHandler) { + app.fiber.Get(name, func(ctx *fiber.Ctx) error { + q := ctx.Query("q", "") + return ctx.Render(name, funcRouter(app.db, q)) + }) +} diff --git a/go.mod b/go.mod index bc02ca3..3dcf76e 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,9 @@ require ( require ( github.com/andybalholm/brotli v1.0.5 // indirect + github.com/gofiber/template v1.8.2 // indirect + github.com/gofiber/template/html/v2 v2.0.5 // indirect + github.com/gofiber/utils v1.1.0 // indirect github.com/google/uuid v1.3.0 // indirect github.com/klauspost/compress v1.16.3 // indirect github.com/mattn/go-colorable v0.1.13 // indirect diff --git a/go.sum b/go.sum index 9a8282d..c340124 100644 --- a/go.sum +++ b/go.sum @@ -5,6 +5,12 @@ github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrt github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/gofiber/fiber/v2 v2.48.0 h1:cRVMCb9aUJDsyHxGFLwz/sGzDggdailZZyptU9F9cU0= github.com/gofiber/fiber/v2 v2.48.0/go.mod h1:xqJgfqrc23FJuqGOW6DVgi3HyZEm2Mn9pRqUb2kHSX8= +github.com/gofiber/template v1.8.2 h1:PIv9s/7Uq6m+Fm2MDNd20pAFFKt5wWs7ZBd8iV9pWwk= +github.com/gofiber/template v1.8.2/go.mod h1:bs/2n0pSNPOkRa5VJ8zTIvedcI/lEYxzV3+YPXdBvq8= +github.com/gofiber/template/html/v2 v2.0.5 h1:BKLJ6Qr940NjntbGmpO3zVa4nFNGDCi/IfUiDB9OC20= +github.com/gofiber/template/html/v2 v2.0.5/go.mod h1:RCF14eLeQDCSUPp0IGc2wbSSDv6yt+V54XB/+Unz+LM= +github.com/gofiber/utils v1.1.0 h1:vdEBpn7AzIUJRhe+CiTOJdUcTg4Q9RK+pEa0KPbLdrM= +github.com/gofiber/utils v1.1.0/go.mod h1:poZpsnhBykfnY1Mc0KeEa6mSHrS3dV0+oBWyeQmb2e0= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= diff --git a/main.go b/main.go index 7af3bff..ff08c37 100644 --- a/main.go +++ b/main.go @@ -20,10 +20,19 @@ func testRouter(db *sqlx.DB, query string) string { return s } +func testHTML(db *sqlx.DB, query string) map[string]interface{} { + result := make(map[string]interface{}) + result["Item"] = "Проверка" + result["value"] = 456 + result["items"] = []string{"Первый", "Второй", "Третий"} + return result +} + func main() { db := fiber.OpenDB("sea") app := fiber.NewApp("test-app", db) app.JSONRouter("/test", testRouter) + app.HTMLRouter("test2", testHTML) app.Start(4444) fmt.Printf("init app fiber: %v\n", app) }