Skip to content

Commit

Permalink
feat: improve fs example (cloudwego#52)
Browse files Browse the repository at this point in the history
* Add example for Static and StaticFS using html and assets

* fix port

* fix import style

* remove unused variable
  • Loading branch information
sujit-baniya authored Nov 21, 2022
1 parent bd37aac commit a0a25a7
Show file tree
Hide file tree
Showing 10 changed files with 166 additions and 13 deletions.
6 changes: 6 additions & 0 deletions file/html-fs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## How to run
* navigate to current directory
`cd file/html-fs`
* start staticFile server
`go run main.go`
* use your browser to access "http://127.0.0.1:8080" or other
1 change: 1 addition & 0 deletions file/html-fs/assets/css/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
h1{color: blue;}
83 changes: 83 additions & 0 deletions file/html-fs/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* Copyright 2022 CloudWeGo Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package main

import (
"context"
"strings"

"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/app/server"
)

func main() {
h := server.Default(server.WithHostPorts("127.0.0.1:8080"))
h.LoadHTMLGlob("views/*")

prefix := "/public"
root := "./assets"
fs := &app.FS{Root: root, PathRewrite: getPathRewriter(prefix)}
h.StaticFS(prefix, fs)

h.GET("/", func(c context.Context, ctx *app.RequestContext) {
ctx.HTML(200, "index.html", nil)
})
h.Spin()
}

func getPathRewriter(prefix string) app.PathRewriteFunc {
// Cannot have an empty prefix
if prefix == "" {
prefix = "/"
}
// Prefix always start with a '/' or '*'
if prefix[0] != '/' {
prefix = "/" + prefix
}

// Is prefix a direct wildcard?
isStar := prefix == "/*"
// Is prefix a partial wildcard?
if strings.Contains(prefix, "*") {
isStar = true
prefix = strings.Split(prefix, "*")[0]
// Fix this later
}
prefixLen := len(prefix)
if prefixLen > 1 && prefix[prefixLen-1:] == "/" {
// /john/ -> /john
prefixLen--
prefix = prefix[:prefixLen]
}
return func(ctx *app.RequestContext) []byte {
path := ctx.Path()
if len(path) >= prefixLen {
if isStar && string(path[0:prefixLen]) == prefix {
path = append(path[0:0], '/')
} else {
path = path[prefixLen:]
if len(path) == 0 || path[len(path)-1] != '/' {
path = append(path, '/')
}
}
}
if len(path) > 0 && path[0] != '/' {
path = append([]byte("/"), path...)
}
return path
}
}
14 changes: 14 additions & 0 deletions file/html-fs/views/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="/public/css/style.css">
<title>Test Document</title>
</head>
<body>
<h1>Static is working well</h1>
</body>
</html>
6 changes: 6 additions & 0 deletions file/html/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## How to run
* navigate to current directory
`cd file/html`
* start staticFile server
`go run main.go`
* use your browser to access "http://127.0.0.1:8080" or other
1 change: 1 addition & 0 deletions file/html/assets/css/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
h1{color: blue;}
36 changes: 36 additions & 0 deletions file/html/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright 2022 CloudWeGo Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package main

import (
"context"

"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/app/server"
)

func main() {
h := server.Default(server.WithHostPorts("127.0.0.1:8081"))
h.LoadHTMLGlob("views/*")

h.Static("/", "./assets")

h.GET("/", func(c context.Context, ctx *app.RequestContext) {
ctx.HTML(200, "index.html", nil)
})
h.Spin()
}
14 changes: 14 additions & 0 deletions file/html/views/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="/css/style.css">
<title>Test Document</title>
</head>
<body>
<h1>Static is working well</h1>
</body>
</html>
6 changes: 4 additions & 2 deletions file/staticFile/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
## How to run
* navigate to current directory
`cd file/staticFile`
* start staticFile server
`go run file/staticFile/main.go`
* use your browser to access "http://127.0.0.1:8080/try_dir" or other
`go run main.go`
* use your browser to access "http://127.0.0.1:8080/main" or other
12 changes: 1 addition & 11 deletions file/staticFile/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,13 @@
package main

import (
"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/app/server"
)

func main() {
h := server.Default(server.WithHostPorts("127.0.0.1:8080"))

// eg. visit: http://127.0.0.1:8080/file/staticFile/main.go
h.Static("/file", "./")

// custom FS as you wish
h.StaticFS("/", &app.FS{})

// like SimpleHTTPServer
h.StaticFS("/try_dir", &app.FS{Root: "./", GenerateIndexPages: true, PathRewrite: app.NewPathSlashesStripper(1)})

h.StaticFile("/main", "./file/staticFile/main.go")
h.StaticFile("/main", "./main.go")

h.Spin()
}

0 comments on commit a0a25a7

Please sign in to comment.