From 578f4a793c8f82a9ea5ef0d95fade42e4704cf8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 17:32:48 +0300 Subject: [PATCH 01/17] Update README.md --- README.md | 95 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index f6e1085b..088f0d7c 100644 --- a/README.md +++ b/README.md @@ -1,113 +1,146 @@ -

- -

- +# Fiber Web Framework en ru -# Fiber [![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) +[![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) -**[Fiber](https://github.com/gofiber/fiber)** is an **[Express](https://expressjs.com/en/4x/api.html)** styled HTTP framework implementation running on **[Fasthttp](https://github.com/valyala/fasthttp)**, the **fastest** HTTP engine for **[Go](https://golang.org/doc/)**. The package make use of similar framework convention as they are in express. People switching from **[Node](https://nodejs.org/en/about/)** to **[Go](https://golang.org/doc/)** often end up in a bad learning curve to start building their webapps, this project is meant to **ease** things up for **fast** development, but with **zero memory allocation** and **performance** in mind. See **[API Documentation](https://gofiber.github.io/fiber/)** + + +**[Fiber](https://github.com/gofiber/fiber)** is an [Express](https://expressjs.com/en/4x/api.html)-styled HTTP web framework implementation running on [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for Go (Golang). The package make use of similar framework convention as they are in Express. + +People switching from [Node.js](https://nodejs.org/en/about/) to [Go](https://golang.org/doc/) often end up in a bad learning curve to start building their webapps, this project is meant to **ease** things up for **fast** development, but with **zero memory allocation** and **performance** in mind. + +πŸ“š See **[API Documentation](https://gofiber.github.io/fiber/)**. [![](https://gofiber.github.io/fiber/static/benchmarks/benchmark.png)](https://gofiber.github.io/fiber/#/benchmarks) -**[Click here to see all benchmark results](https://gofiber.github.io/fiber/#/benchmarks)** + +πŸ‘‰ **[Click here](https://gofiber.github.io/fiber/#/benchmarks)** to see all benchmark results. ## Features -* Optimized for speed and low memory usage. + +* Optimized for speed and low memory usage * Rapid Server-Side Programming * Easy routing with parameters * Static files with custom prefix * Middleware with Next support * Express API endpoints -* **[API Documentation](https://gofiber.github.io/fiber/)** +* [Comprehensible documentation](https://gofiber.github.io/fiber/) ## Installing -Assuming you’ve already installed **[Go](https://golang.org/doc/)**, install the **[Fiber](https://github.com/gofiber/fiber)** package by calling the following command: -```bash + +Assuming you’ve already installed Go `1.11+` πŸ˜‰ + +Install the [Fiber](https://github.com/gofiber/fiber) package by calling the following command: + +```console $ go get -u github.com/gofiber/fiber ``` -## Hello world +## Hello, world! + Embedded below is essentially the simplest Fiber app you can create. -```bash -$ create server.go -``` + ```go +// server.go + package main import "github.com/gofiber/fiber" func main() { + // Create new Fiber instance app := fiber.New() + // Create new route with GET method app.Get("/", func(c *fiber.Ctx) { c.Send("Hello, World!") }) - + + // Start server on http://localhost:8080 app.Listen(8080) } ``` -```bash + +Go to console and run: + +```console $ go run server.go ``` -Browse to **http://localhost:8080** and you should see `Hello, World!` on the page. + +And now, browse to **http://localhost:8080** and you should see `Hello, World!` on the page! πŸŽ‰ ## Static files + To serve static files, use the [Static](https://gofiber.github.io/fiber/#/?id=static-files) method. + ```go package main import "github.com/gofiber/fiber" func main() { + // Create new Fiber instance app := fiber.New() - + + // Serve all static files on ./public folder app.Static("./public") - + + // Start server on http://localhost:8080 app.Listen(8080) } ``` + Now, you can load the files that are in the public directory: -```shell + +```console http://localhost:8080/hello.html -http://localhost:8080/js/jquery.js +http://localhost:8080/js/script.js http://localhost:8080/css/style.css ``` ## Middleware -Middleware has never been so easy, just like express you call the Next() matching route function! + +Middleware has never been so easy, just like Express you call the `Next()` matching route function! + ```go package main import "github.com/gofiber/fiber" func main() { + // Create new Fiber instance app := fiber.New() + // Define all used middlewares in Use() + app.Use(func(c *fiber.Ctx) { c.Write("Match anything!\n") c.Next() }) + app.Use("/api", func(c *fiber.Ctx) { c.Write("Match starting with /api\n") c.Next() }) + app.Get("/api/user", func(c *fiber.Ctx) { c.Write("Match exact path /api/user\n") }) - - + + // Start server on http://localhost:8080 app.Listen(8080) } ``` ## API Documentation -We created an extended API documentation including examples, **[click here](https://gofiber.github.io/fiber/)** + +We created an extended API documentation including examples, **[click here](https://gofiber.github.io/fiber/)**. + + +## Stargazers over time + +[![Stargazers over time](https://starchart.cc/gofiber/fiber.svg)](https://starchart.cc/gofiber/fiber) ## License -gofiber/fiber is free and open-source software licensed under the [MIT License](https://github.com/gofiber/fiber/edit/master/LICENSE). - +☝️ _Please note:_ `gofiber/fiber` is free and open-source software licensed under the [MIT License](https://github.com/gofiber/fiber/edit/master/LICENSE). *Caught a mistake? [Edit this page on GitHub!](https://github.com/gofiber/fiber/blob/master/README.md)* From 14d6bd2be98c416d79bfcccd35bd88b84f256726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 17:50:43 +0300 Subject: [PATCH 02/17] Update README.md --- README.md | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 088f0d7c..99f3e2bd 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,18 @@ -# Fiber Web Framework en ru +# πŸ”Œ Fiber Web Framework en ru [![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) -**[Fiber](https://github.com/gofiber/fiber)** is an [Express](https://expressjs.com/en/4x/api.html)-styled HTTP web framework implementation running on [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for Go (Golang). The package make use of similar framework convention as they are in Express. +**[Fiber](https://github.com/gofiber/fiber)** is an [Express](https://expressjs.com/en/4x/api.html)-styled HTTP web framework implementation running on [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for Go (Golang). The package make use of **similar framework convention** as they are in Express. -People switching from [Node.js](https://nodejs.org/en/about/) to [Go](https://golang.org/doc/) often end up in a bad learning curve to start building their webapps, this project is meant to **ease** things up for **fast** development, but with **zero memory allocation** and **performance** in mind. +People switching from [Node.js](https://nodejs.org/en/about/) to [Go](https://golang.org/doc/) often end up in a bad learning curve to start building their webapps, this project is meant to **ease** things up for **fast** development, but with **zero memory allocation** and **performance** in mind. -πŸ“š See **[API Documentation](https://gofiber.github.io/fiber/)**. +## API Documentation + +πŸ“š We created an extended API documentation (_including examples_), **[click here](https://gofiber.github.io/fiber/)**. + +## Benchmark [![](https://gofiber.github.io/fiber/static/benchmarks/benchmark.png)](https://gofiber.github.io/fiber/#/benchmarks) @@ -22,7 +26,7 @@ People switching from [Node.js](https://nodejs.org/en/about/) to [Go](https://go * Static files with custom prefix * Middleware with Next support * Express API endpoints -* [Comprehensible documentation](https://gofiber.github.io/fiber/) +* [Extended documentation](https://gofiber.github.io/fiber/) ## Installing @@ -65,7 +69,7 @@ Go to console and run: $ go run server.go ``` -And now, browse to **http://localhost:8080** and you should see `Hello, World!` on the page! πŸŽ‰ +And now, browse to `http://localhost:8080` and you should see `Hello, World!` on the page! πŸŽ‰ ## Static files @@ -130,10 +134,15 @@ func main() { } ``` -## API Documentation +## Project assistance -We created an extended API documentation including examples, **[click here](https://gofiber.github.io/fiber/)**. +If you want to say Β«thank youΒ» or/and support active development `gofiber/fiber`: +1. Add a GitHub Star to project. +2. Twit about project [on your Twitter](https://twitter.com/intent/tweet?text=%F0%9F%94%8C%20Fiber%20is%20an%20Express.js%20inspired%20Go%20web%20framework%20build%20on%20%F0%9F%9A%80%20Fasthttp%20https%3A%2F%2Fgithub.com%2Fgofiber%2Ffiber). +3. Help us to translate this `README` and [API Docs](https://gofiber.github.io/fiber/) to another language. + +Thanks for your support! 😘 Together, we make `Fiber Web Framework` better every day. ## Stargazers over time @@ -141,6 +150,4 @@ We created an extended API documentation including examples, **[click here](http ## License -☝️ _Please note:_ `gofiber/fiber` is free and open-source software licensed under the [MIT License](https://github.com/gofiber/fiber/edit/master/LICENSE). - -*Caught a mistake? [Edit this page on GitHub!](https://github.com/gofiber/fiber/blob/master/README.md)* +⚠️ _Please note:_ `gofiber/fiber` is free and open-source software licensed under the [MIT License](https://github.com/gofiber/fiber/edit/master/LICENSE). From 39727e8862fe3e4502142796ad19ef745a632879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 17:51:53 +0300 Subject: [PATCH 03/17] Add files via upload --- docs/static/en.svg | 51 ++++++++++++++++++++++++++++++++++++++++++++++ docs/static/ru.svg | 40 ++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 docs/static/en.svg create mode 100644 docs/static/ru.svg diff --git a/docs/static/en.svg b/docs/static/en.svg new file mode 100644 index 00000000..9d23a3c0 --- /dev/null +++ b/docs/static/en.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/ru.svg b/docs/static/ru.svg new file mode 100644 index 00000000..3a056869 --- /dev/null +++ b/docs/static/ru.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c19507f9073bc644daf2112de881c6a63c33ced1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 17:54:26 +0300 Subject: [PATCH 04/17] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 99f3e2bd..fcdf79a5 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# πŸ”Œ Fiber Web Framework en ru +# πŸ”Œ Fiber Web Framework en ru [![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) - + **[Fiber](https://github.com/gofiber/fiber)** is an [Express](https://expressjs.com/en/4x/api.html)-styled HTTP web framework implementation running on [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for Go (Golang). The package make use of **similar framework convention** as they are in Express. From e8a601094ee2c3a68c395453f7609c7cab709c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 18:11:04 +0300 Subject: [PATCH 05/17] Add files via upload --- docs/static/logo.jpg | Bin 50717 -> 44085 bytes docs/static/logo_320px_trans.png | Bin 0 -> 51024 bytes docs/static/logo_750px_trans.png | Bin 0 -> 195288 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/static/logo_320px_trans.png create mode 100644 docs/static/logo_750px_trans.png diff --git a/docs/static/logo.jpg b/docs/static/logo.jpg index f415481802a25a78bd1c17662a07f41ef8eabb8b..66211f6fa1ff7a5d1082c96df37bc8e7bf0252f4 100644 GIT binary patch literal 44085 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%0D?YhP0!?GfpmWMxQRtot#MXwjA0d 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 diff --git a/docs/static/logo_320px_trans.png b/docs/static/logo_320px_trans.png new file mode 100644 index 0000000000000000000000000000000000000000..fefb7666991168dd3f9e0b1cc65503d1ae528906 GIT binary patch literal 51024 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 literal 0 HcmV?d00001 diff --git a/docs/static/logo_750px_trans.png b/docs/static/logo_750px_trans.png new file mode 100644 index 0000000000000000000000000000000000000000..e2385d79aba6f6e8f556813dcc0eb957a5a153e6 GIT binary patch literal 195288 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
+
You can enable the **prefork** feature by adding the **-prefork** flag. @@ -83,6 +92,7 @@ You can enable the **prefork** feature by adding the **-prefork** flag. ``` Or enable the **Prefork** option in your app. + ```go app := fiber.New() @@ -99,7 +109,9 @@ app.Listen(8080) ``` #### Methods + Routes an HTTP request, where METHOD is the [HTTP method](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) of the request, such as GET, PUT, POST, and so on capitalized. Thus, the actual methods are **app.Get()**, **app.Post()**, **app.Put()**, and so on. + ```go // Function signature app.Get(handler func(*Ctx)) @@ -123,36 +135,47 @@ app.Use(...) // Will only see wheter url starts with specified path without :par ``` #### Static + To serve static files such as images, CSS files, and JavaScript files, replace your function handler with a file or directory string. By default this method will send `index.html` files in response to a request on a directory. + ```go // Function signature app.Static(root string) app.Static(prefix, root string) ``` + For example, use the following code to serve images, CSS files, and JavaScript files in a directory named public: ```go app.Static("./public") ``` + Now, you can load the files that are in the public directory: + ```shell http://localhost:8080/hello.html http://localhost:8080/js/jquery.js http://localhost:8080/css/style.css ``` + To use multiple static assets directories, call the Static function multiple times: + ```go app.Static("./public") app.Static("./files") ``` -?>For best results, use a reverse proxy cache like [NGINX](https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/) to improve performance of serving static assets. + +?>For best results, use a reverse proxy cache like [NGINX](https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/) to improve performance of serving static assets. To create a virtual path prefix (where the path does not actually exist in the file system) for files that are served by the express.static function, specify a mount path for the static directory, as shown below: + ```go app.Static("/static", "./public") ``` + Now, you can load the files that are in the public directory from the /static path prefix. + ```shell http://localhost:8080/static/hello.html http://localhost:8080/static/js/jquery.js @@ -160,7 +183,9 @@ http://localhost:8080/static/css/style.css ``` #### Listen + Binds and listens for connections on the specified address. This can be a **INT** for port or **STRING** for address. To enable **TLS/HTTPS** you can append your **cert** and **key** path. + ```go // Function signature app.Listen(address interface{}, tls ...string) @@ -175,5 +200,4 @@ app.Listen("127.0.0.1:8080") app.Listen(443, "server.crt", "server.key") ``` - -*Caught a mistake? [Edit this page on GitHub!](https://github.com/gofiber/fiber/blob/master/docs/application.md)* +_Caught a mistake? [Edit this page on GitHub!](https://github.com/gofiber/fiber/blob/master/docs/application.md)_ diff --git a/docs/benchmarks.md b/docs/benchmarks.md index b0b151fa..b81f2ca2 100644 --- a/docs/benchmarks.md +++ b/docs/benchmarks.md @@ -1,16 +1,16 @@ # Benchmarks #### TechEmpower -* **CPU** Intel Xeon Gold 5120 -* **MEM** 32GB -* **GO** go1.13.6 linux/amd64 -* **OS** Linux -* **NET** Dedicated Cisco 10-gigabit Ethernet switch. +- **CPU** Intel Xeon Gold 5120 +- **MEM** 32GB +- **GO** go1.13.6 linux/amd64 +- **OS** Linux +- **NET** Dedicated Cisco 10-gigabit Ethernet switch. Below you can see the results of tested go frameworks responding in plaintext. To view the list yourself, [Plaintext Go Results](https://www.techempower.com/benchmarks/#section=test&runid=350f0783-cc9b-4259-9831-28987799782a&hw=ph&test=plaintext&l=zijocf-1r). -To see all language frameworks, [Plaintext All Results](https://www.techempower.com/benchmarks/#section=test&runid=350f0783-cc9b-4259-9831-28987799782a&hw=ph&test=plaintext). +To see all language frameworks, [Plaintext All Results](https://www.techempower.com/benchmarks/#section=test&runid=350f0783-cc9b-4259-9831-28987799782a&hw=ph&test=plaintext). Plaintext [![](static/benchmarks/techempower-plaintext.png)](https://www.techempower.com/benchmarks/#section=test&runid=350f0783-cc9b-4259-9831-28987799782a&hw=ph&test=plaintext&l=zijocf-1r) @@ -31,14 +31,15 @@ Data updates [![](static/benchmarks/techempower-updates.png)](https://www.techempower.com/benchmarks/#section=test&runid=350f0783-cc9b-4259-9831-28987799782a&hw=ph&test=update&l=zijocf-1r) #### Go-Web + [go-web-framework-benchmark](https://github.com/smallnest/go-web-framework-benchmark) -* **CPU** Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz -* **MEM** 4GB -* **GO** go1.13.6 linux/amd64 -* **OS** Linux +- **CPU** Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz +- **MEM** 4GB +- **GO** go1.13.6 linux/amd64 +- **OS** Linux -The first test case is to mock 0 ms, 10 ms, 100 ms, 500 ms processing time in handlers. +The first test case is to mock 0 ms, 10 ms, 100 ms, 500 ms processing time in handlers. ![](static/benchmarks/benchmark.png) @@ -68,8 +69,8 @@ If we enable http pipelining, test result as below: ![](static/benchmarks/concurrency-pipeline.png) - -*Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/benchmarks.md)* +_Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/benchmarks.md)_ diff --git a/docs/context.md b/docs/context.md index beb2c195..60178a17 100644 --- a/docs/context.md +++ b/docs/context.md @@ -1,8 +1,11 @@ # Context + The ctx object represents the HTTP request and response and has methods for the request query string, parameters, body, HTTP headers, and so on. In this documentation and by convention, the context is always referred to as c but its actual name is determined by the parameters to the callback function in which you’re working. #### Accepts + Checks if the specified content types are acceptable, based on the request’s Accept HTTP header field. You can use an extention or content-type format + ```go // Function signature c.Accepts(types ...string) string @@ -31,7 +34,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### AcceptsCharsets + Returns the first accepted charset of the specified character sets, based on the request’s Accept-Charset HTTP header field + ```go // Function signature c.AcceptsCharsets(charsets ...string) string @@ -50,9 +55,10 @@ app.Get("/", func(c *fiber.Ctx) { }) ``` - #### AcceptsEncodings + Returns the first accepted encoding of the specified encodings, based on the request’s Accept-Encoding HTTP header field. + ```go // Function signature c.AcceptsEncodings(encodings ...string) string @@ -72,7 +78,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### AcceptsLanguages + Returns the first accepted language of the specified languages, based on the request’s Accept-Language HTTP header field. + ```go // Function signature c.AcceptsLanguages(languages ...string) string @@ -92,7 +100,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Append + Appends the specified value to the HTTP response header field. If the header is not already set, it creates the header with the specified value. The value parameter must be a string. + ```go // Function signature c.Append(field, values ...string) @@ -113,7 +123,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Attachment -Sets the HTTP response [Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition) header field to β€œattachment”. If a filename is given, then it sets the Content-Type based on the extension name via (Type)[#type], and sets the Content-Disposition β€œfilename=” parameter. + +Sets the HTTP response [Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition) header field to β€œattachment”. If a filename is given, then it sets the Content-Type based on the extension name via [Type](#type), and sets the Content-Disposition β€œfilename=” parameter. + ```go // Function signature c.Attachment(file ...string) @@ -132,7 +144,9 @@ app.Get("/", func(c *fiber.Ctx) { #### BaseUrl #### AcceptsLanguages + Returns the base URL, protocol and hostname combined. + ```go // Function signature c.BaseUrl() bool @@ -146,7 +160,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### BasicAuth + BasicAuth returns the username and password provided in the request's Authorization header, if the request uses [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication). + ```go // Function signature c.BasicAuth() (user, pass string, ok bool) @@ -167,10 +183,12 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Body + Contains the raw post body submitted in the request. Calling a key in body returns a string value if exist or you loop trough the body params using a key value function callback. The following example shows how to use the body function. + ```go // Function signature c.Body() string @@ -190,14 +208,16 @@ app.Post("/", func(c *fiber.Ctx) { // Loop trough all body params c.Body(func(key string, val string) { - fmt.Printl(key, val) + fmt.Printl(key, val) // => "user" "john" }) }) ``` #### ClearCookie + Clears all client cookies or a specific cookie by name by setting the expire date in the past. + ```go // Function signature c.ClearCookie() @@ -217,7 +237,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Cookie + Sets cookie name to value, the third options parameter is not implemented yet. + ```go // Function signature c.Cookie(name, value string) @@ -259,7 +281,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Cookies + Get cookies + ```go // Function signature c.Cookies() string @@ -287,7 +311,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Download + Transfers the file at path as an β€œattachment”. Typically, browsers will prompt the user for download. By default, the Content-Disposition header β€œfilename=” parameter is path (this typically appears in the browser dialog). Override this default with the filename parameter. + ```go // Function signature c.Download(path string) @@ -304,11 +330,14 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### !End + !> Planned for v2.0.0 #### Fasthttp + You can still access and use all Fasthttp methods and properties. Please read the [Fasthttp Documentation](https://godoc.org/github.com/valyala/fasthttp) for more information + ```go // Function signature c.Fasthttp... @@ -324,6 +353,7 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Format + Performs content-negotiation on the Accept HTTP header. It uses [Accepts](#accepts) to select a proper format. If the header is not specified or there is no proper format, text/plain is used. ```go @@ -348,7 +378,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### FormFile + MultipartForm files can be retrieved by name, the first file from the given key is returned. + ```go // Function signature c.FormFile(name string) (*multipart.FileHeader, error) @@ -367,7 +399,9 @@ app.Post("/", func(c *fiber.Ctx) { ``` #### FormValue + MultipartForm values can be retrieved by name, the first value from the given key is returned. + ```go // Function signature c.FormValue(name string) string @@ -381,10 +415,13 @@ app.Post("/", func(c *fiber.Ctx) { ``` #### !Fresh + !> Planned for v2.0.0 #### Get + Returns the HTTP response header specified by field. The match is case-insensitive. + ```go // Function signature c.Get(field string) string @@ -403,10 +440,13 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### !HeadersSent + !> Planned for v2.0.0 #### Hostname + Contains the hostname derived from the Host HTTP header. + ```go // Function signature c.Hostname() string @@ -420,7 +460,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Ip + Contains the remote IP address of the request. + ```go // Function signature c.Ip() string @@ -433,7 +475,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Ips + contains an array of IP addresses specified in the X-Forwarded-For request header. + ```go // Function signature c.Ips() []string @@ -447,7 +491,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Is + Returns the matching content type if the incoming request’s β€œContent-Type” HTTP header field matches the MIME type specified by the type parameter. If the request has no body, returns false. + ```go // Function signature c.Is(typ string) bool @@ -455,19 +501,21 @@ c.Is(typ string) bool // Example app.Get("/", func(c *fiber.Ctx) { // Content-Type: text/html; charset=utf-8 - c.Is("html") + c.Is("html") // => true c.Is(".html") // => true - c.Is("json") + c.Is("json") // => false }) ``` #### Json + Converts any interface or string to json using [Jsoniter](https://github.com/json-iterator/go), this function also sets the content header to application/json. + ```go // Function signature c.Json(v interface{}) error @@ -494,6 +542,7 @@ app.Listen(8080) ``` Or with error checking + ```go app.Get("/json", func(c *fiber.Ctx) { data := SomeStruct{ @@ -508,7 +557,9 @@ app.Get("/json", func(c *fiber.Ctx) { ``` #### JsonBytes + This function accepts raw []byte bodies and sets the content header to application/json. This function is used if you do not need type assertion. + ```go // Function signature c.Json(json []byte) @@ -521,11 +572,12 @@ app.Get("/json", func(c *fiber.Ctx) { app.Listen(8080) ``` - #### Jsonp + Sends a JSON response with JSONP support. This method is identical to [Json()](#json), except that it opts-in to JSONP callback support. By default, the JSONP callback name is simply callback. Override this by passing a named string in the function. + ```go // Function signature c.Jsonp(v interface{}) error @@ -553,7 +605,9 @@ app.Listen(8080) ``` #### JsonString + This function accepts raw string body and sets the content header to application/json. This function is used if you do not need type assertion. + ```go // Function signature c.Json(json string) @@ -567,7 +621,9 @@ app.Listen(8080) ``` #### Links + Joins the links followed by the propery to populate the response’s Link HTTP header field. + ```go // Function signature c.Links(link ...string) @@ -584,9 +640,11 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Locals -A function that stores string variables scoped to the request, and therefore available only to the routes that match the request. + +A function that stores string variables scoped to the request, and therefore available only to the routes that match the request. This is usefull if you want to pass some specific values to the next middleware. + ```go // Function signature c.Locals(key string) @@ -608,6 +666,7 @@ app.Get("/", func(c *fiber.Ctx) { ``` You can put any type inside the locals, don't forget to convert it back when you are using the variable + ```go type JSON struct { Message string `json:"message"` @@ -627,7 +686,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Location + Sets the response Location HTTP header to the specified path parameter. + ```go // Function signature c.Location(path string) @@ -640,7 +701,9 @@ app.Post("/", func(c *fiber.Ctx) { ``` #### Method + Contains a string corresponding to the HTTP method of the request: GET, POST, PUT, and so on. + ```go // Function signature c.Method() string @@ -653,9 +716,11 @@ app.Post("/", func(c *fiber.Ctx) { ``` #### MultipartForm + To access multipart form entries, you can parse the binary with .MultipartForm(). This returns a map[string][]string, so given a key the value will be a string slice. So accepting multiple files or values is easy, as shown below! + ```go // Function signature c.MultipartForm() (*multipart.Form, error) @@ -688,7 +753,9 @@ app.Post("/", func(c *fiber.Ctx) { ``` #### Next + When Next() is called, it executes the next function in the stack that matches the current route. + ```go // Function signature c.Next() @@ -709,7 +776,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### OriginalUrl + Contains the original request URL. + ```go // Function signature c.OriginalUrl() string @@ -723,7 +792,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Params + This method can be used to get the route parameters. For example, if you have the route /user/:name, then the β€œname” property is available as c.Params("name"). This method defaults "". + ```go // Function signature c.Params(param string) string @@ -737,7 +808,9 @@ app.Get("/user/:name", func(c *fiber.Ctx) { ``` #### Path + Contains the path part of the request URL. + ```go // Function signature c.Path() string @@ -751,6 +824,7 @@ app.Get("/users", func(c *fiber.Ctx) { ``` #### Protocol + Contains the request protocol string: either http or (for TLS requests) https. ```go @@ -763,8 +837,11 @@ app.Get("/", func(c *fiber.Ctx) { // => "http" }) ``` + #### Query + This property is an object containing a property for each query string parameter in the route. If there is no query string, it returns an empty string + ```go // Function signature c.Query(parameter string) string @@ -782,10 +859,13 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### !Range + !> Planned for v2.0.0 #### Redirect + Redirects to the URL derived from the specified path, with specified status, a positive integer that corresponds to an HTTP status code . If not specified, status defaults to β€œ302 β€œFound”. + ```go // Function signature c.Redirect(path string) @@ -801,11 +881,14 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### !Render + !> Planned for v2.0.0 #### Route + Contains the currently-matched route struct, **only use this for debugging**. It returns an anonymous struct as shown below. + ```go // Function signature c.Route() struct { @@ -830,8 +913,8 @@ app.Post("/:api?", func(c *fiber.Ctx) { }) ``` - #### SaveFile + This function is used to save any multipart file to disk. You can see a working example here: [Multiple file upload](#multipartform) @@ -841,6 +924,7 @@ c.SaveFile(fh *multipart.FileHeader, path string) ``` #### Secure + A Boolean property that is true if a TLS connection is established. ```go @@ -852,9 +936,11 @@ c.Protocol() == "https" ``` #### Send + Sends the HTTP response. The Send parameters can be of any type + ```go // Function signature c.Send(body ...interface{}) @@ -873,8 +959,10 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### SendBytes + Same as Send() but without type assertion. I suggest using this in production for optimal performance. + ```go // Function signature c.SendBytes(body []byte) @@ -886,7 +974,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### SendFile -Transfers the file at the given path. Sets the Content-Type response HTTP header field based on the filename’s extension. + +Transfers the file at the given path. Sets the Content-Type response HTTP header field based on the filename’s extension. + ```go // Function signature c.SendFile(path string) @@ -902,7 +992,9 @@ app.Get("/not-found", func(c *fiber.Ctx) { ``` #### SendStatus + Sets the status code, but also the correct status message in the body if the response body is still empty. You can find all status codes and messages in [status.go](https://github.com/gofiber/fiber/blob/master/status.go) + ```go // Function signature c.SendStatus(status int) @@ -921,8 +1013,10 @@ app.Get("/not-found", func(c *fiber.Ctx) { ``` #### SendString + Same as Send() but without type assertion. I suggest using this in production for optimal performance. + ```go // Function signature c.SendString(body string) @@ -934,7 +1028,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Set + Sets the response’s HTTP header field to value. To set multiple fields at once, pass an object as the parameter. + ```go // Function signature c.Set(key, value string) @@ -947,13 +1043,17 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### !SignedCookies + !> Planned for v2.0.0 #### !Stale + !> Planned for v2.0.0 #### Status + Sets the HTTP status for the response. It is a chainable alias of Node’s response.statusCode. + ```go // Function signature c.Status(status int) @@ -967,8 +1067,10 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Subdomains + An array of subdomains in the domain name of the request. The application property subdomain offset, which defaults to 2, is used for determining the beginning of the subdomain segments. + ```go // Function signature c.Subdomains() []string @@ -982,7 +1084,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Type + Sets the Content-Type HTTP header to the MIME type listed [here](https://github.com/nginx/nginx/blob/master/conf/mime.types) specified by the file extension. + ```go // Function signature c.Type(typ string) string @@ -1004,9 +1108,11 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Vary + Adds the given header field to the Vary response header of res. This can be a single field, or multiple fields. This will append the header if not already listed, otherwise leaves it listed in the current location. + ```go // Function signature c.Vary(field ...string) @@ -1033,9 +1139,11 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Write + Appends to the HTTP response. The Write parameter can be any type + ```go // Function signature c.Write(bodies ...interface{}) @@ -1057,7 +1165,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Xhr + A Boolean property that is true if the request’s **X-Requested-With** header field is **XMLHttpRequest**, indicating that the request was issued by a client library such as [jQuery](https://api.jquery.com/jQuery.ajax/). + ```go // Function signature c.Xhr() bool @@ -1070,7 +1180,9 @@ app.Get("/", func(c *fiber.Ctx) { ``` #### Xml + Xml sets the header to "application/xml" and marshals your interface to xml. + ```go // Function signature c.Xml(xml interface{}) error @@ -1092,4 +1204,4 @@ app.Listen(8080) ``` -*Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/context.md)* +_Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/context.md)_ diff --git a/docs/examples.md b/docs/examples.md index b1ff51f7..87400fc3 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -1,8 +1,8 @@ # Examples #### Multiple File Upload -```go +```go package main import "github.com/fenny/fiber" @@ -25,7 +25,9 @@ func main() { app.Listen(8080) } ``` + #### 404 Handling + ```go package main @@ -43,7 +45,9 @@ func main() { app.Listen(8080) } ``` + #### Static Caching + ```go package main @@ -61,7 +65,9 @@ func main() { app.Listen(8080) } ``` + #### Enable CORS + ```go package main @@ -82,7 +88,9 @@ func main() { app.Listen(8080) } ``` + #### Returning JSON + ```go package main @@ -110,7 +118,9 @@ func main() { app.Listen(8080) } ``` + #### TLS/HTTPS + ```go package main @@ -127,4 +137,4 @@ func main() { } ``` -*Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/examples.md)* +_Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/examples.md)_ diff --git a/docs/functions.txt b/docs/functions.txt index e3d913a6..a8365fff 100644 --- a/docs/functions.txt +++ b/docs/functions.txt @@ -4,7 +4,7 @@ AcceptsEncodings AcceptsLanguages Append Attachment -BaseUrl +BaseURL BasicAuth Body ClearCookie @@ -19,10 +19,10 @@ Fresh Get HeadersSent Hostname -Ip +IP Ips Is -Json +JSON Jsonp Links Locals @@ -55,4 +55,4 @@ Subdomains Type Vary Xhr -Xml +XML diff --git a/docs/getting_started.md b/docs/getting_started.md index 4277475c..2e00e8a0 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -1,27 +1,35 @@ accessibility text

+ [![Latest Release](https://img.shields.io/github/release/gofiber/fiber.svg)](https://github.com/gofiber/fiber/releases/latest) [![GoDoc](https://godoc.org/github.com/gofiber/fiber?status.svg)](http://godoc.org/github.com/gofiber/fiber) [![Go Report](https://goreportcard.com/badge/github.com/gofiber/fiber)](https://goreportcard.com/report/github.com/gofiber/fiber) [![GitHub license](https://img.shields.io/github/license/gofiber/fiber.svg)](https://github.com/gofiber/fiber/blob/master/LICENSE) [![Join the chat at https://gitter.im/FiberGo/community](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/FiberGo/community)
+ # Getting started -!>**IMPORTANT: Always use versioning control using [go.mod](https://blog.golang.org/using-go-modules) to avoid breaking API changes!** + +!>**IMPORTANT: Always use versioning control using [go.mod](https://blog.golang.org/using-go-modules) to avoid breaking API changes!** **[Fiber](https://github.com/gofiber/fiber)** is a router framework build on top of [FastHTTP](https://github.com/valyala/fasthttp), the fastest HTTP package for **[Go](https://golang.org/doc/)**.
This library is inspired by [Express](https://expressjs.com/en/4x/api.html), one of the most populair and well known web framework for **[Nodejs](https://nodejs.org/en/about/)**. #### Installing + Assuming you’ve already installed [Go](https://golang.org/doc/), install the [Fiber](https://github.com/gofiber/fiber) package by calling the following command: + ```shell -$ go get -u github.com/gofiber/fiber +go get -u github.com/gofiber/fiber ``` #### Hello world + Embedded below is essentially the simplest Fiber app you can create. + ```shell -$ create server.go +create server.go ``` + ```go package main @@ -37,12 +45,15 @@ func main() { app.Listen(8080) } ``` + ```shell -$ go run server.go +go run server.go ``` + Browse to http://localhost:8080 and you should see Hello, World! on the page. #### Basic routing + Routing refers to determining how an application responds to a client request to a particular endpoint, which is a URI (or path) and a specific HTTP request method (GET, POST, and so on). Each route can have one handler function, that is executed when the route is matched. @@ -55,14 +66,15 @@ app.Method(func(*fiber.Ctx)) app.Method(path string, func(*fiber.Ctx)) ``` -* **app** is an instance of **[Fiber](#hello-world)**. -* **Method** is an [HTTP request method](application?id=methods), in capitalization: Get, Put, Post etc -* **path string** is a path on the server. -* **func(*fiber.Ctx)** is a function containing the [Context](/context) executed when the route is matched. +- **app** is an instance of **[Fiber](#hello-world)**. +- **Method** is an [HTTP request method](application?id=methods), in capitalization: Get, Put, Post etc +- **path string** is a path on the server. +- **func(\*fiber.Ctx)** is a function containing the [Context](/context) executed when the route is matched. This tutorial assumes that an instance of fiber named app is created and the server is running. If you are not familiar with creating an app and starting it, see the [Hello world](#hello-world) example. -The following examples illustrate defining simple routes. +The following examples illustrate defining simple routes. + ```go // Respond with Hello, World! on the homepage: app.Get("/", func(c *fiber.Ctx) { @@ -95,22 +107,27 @@ app.Get("/api/*", func(c *fiber.Ctx) { ``` #### Static files + To serve static files such as images, CSS files, and JavaScript files, replace your function handler with a file or directory string. + ```go // Function signature app.Static(root string) app.Static(prefix, root string) ``` + For example, use the following code to serve images, CSS files, and JavaScript files in a directory named public: ```go app.Static("./public") ``` + Now, you can load the files that are in the public directory: + ```shell http://localhost:8080/hello.html http://localhost:8080/js/jquery.js http://localhost:8080/css/style.css ``` -*Caught a mistake? [Edit this page on GitHub!](https://github.com/gofiber/fiber/blob/master/docs/getting_started.md)* +_Caught a mistake? [Edit this page on GitHub!](https://github.com/gofiber/fiber/blob/master/docs/getting_started.md)_ diff --git a/docs/license.md b/docs/license.md index 75d8abd8..57831ed4 100644 --- a/docs/license.md +++ b/docs/license.md @@ -1,5 +1,6 @@ # License & Thanks -Special thanks to some amazing people and organizations: + +Special thanks to some amazing people and organizations: [@fenny](https://github.com/fenny) / [Fiber](https://github.com/gofiber/fiber/blob/master/LICENSE) [@valyala](https://github.com/valyala) / [Fasthttp](https://github.com/valyala/fasthttp/blob/master/LICENSE) @@ -8,7 +9,6 @@ Special thanks to some amazing people and organizations: [@vincentLiuxiang](https://github.com/vincentLiuxiang) / [Lu](https://github.com/vincentLiuxiang/lu/blob/master/LICENSE) [@tj](https://github.com/tj) / [Expressjs](https://github.com/expressjs/express) [@pillarjs](https://github.com/pillarjs) / [Path-to-regexp](https://github.com/pillarjs/path-to-regexp/blob/master/LICENSE) -[@techempower](https://github.com/TechEmpower) / [FrameworkBenchmarks](https://github.com/TechEmpower/FrameworkBenchmarks) +[@techempower](https://github.com/TechEmpower) / [FrameworkBenchmarks](https://github.com/TechEmpower/FrameworkBenchmarks) - -*Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/license.md)* +_Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/license.md)_ diff --git a/docs/routing.md b/docs/routing.md index d397fa66..bd10e307 100644 --- a/docs/routing.md +++ b/docs/routing.md @@ -1,7 +1,7 @@ # Routing - #### Paths + Route paths, in combination with a request method, define the endpoints at which requests can be made. Route paths can be strings, string patterns, or regular expressions. The characters ?, +, "8", and () are subsets of their regular expression counterparts. The hyphen (-) and the dot (.) are interpreted literally by string-based paths. @@ -24,7 +24,9 @@ app.Get("/random.text", func(c *fiber.Ctx) { c.Send("random.text") }) ``` + Here are some examples of route paths based on string patterns. + ```go // This route path will match acd and abcd. app.Get("/ab?cd", func(c *fiber.Ctx) { @@ -48,6 +50,7 @@ app.Get("/ab(cd)?e", func(c *fiber.Ctx) { ``` #### Parameters + Route parameters are named URL segments that are used to capture the values specified at their position in the URL. The captured values can be retrieved using the [Params](context#params) function, with the name of the route parameter specified in the path as their respective keys. To define routes with route parameters, simply specify the route parameters in the path of the route as shown below. @@ -66,11 +69,13 @@ app.Get("/user/:name?", func(c *fiber.Ctx) { c.Send(c.Params("name")) }) ``` + ?>The name of route parameters must be made up of β€œword characters” ([A-Za-z0-9_]). !> The hyphen (-) and the dot (.) are not interpreted literally yet, planned for V2 #### Middleware + The [Next](context#next) function is a function in the [Fiber](https://github.com/fenny/fiber) router which, when called, executes the next function that matches the current route. Functions that are designed to make changes to the request or response are called middleware functions. @@ -99,4 +104,4 @@ app.Get("/", func(c *fiber.Ctx) { app.Listen(8080) ``` -*Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/routing.md)* +_Caught a mistake? [Edit this page on GitHub!](https://github.com/Fenny/fiber/blob/master/docs/routing.md)_ diff --git a/docs/static/en.svg b/docs/static/flags/en.svg similarity index 100% rename from docs/static/en.svg rename to docs/static/flags/en.svg diff --git a/docs/static/ru.svg b/docs/static/flags/ru.svg similarity index 100% rename from docs/static/ru.svg rename to docs/static/flags/ru.svg diff --git a/go.sum b/go.sum deleted file mode 100644 index 1d05fb6b..00000000 --- a/go.sum +++ /dev/null @@ -1,26 +0,0 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/klauspost/compress v1.8.2 h1:Bx0qjetmNjdFXASH02NSAREKpiaDwkO1DRZ3dV2KCcs= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.8.0 h1:actnGGBYtGQmxVaZxyZpp57Vcc2NhcO7mMN0IMwCC0w= -github.com/valyala/fasthttp v1.8.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a h1:0R4NLDRDZX6JcmhJgXi5E4b8Wg84ihbmUKp/GvSPEzc= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/listen.go b/listen.go index 2d4cc575..a286d3d7 100644 --- a/listen.go +++ b/listen.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber @@ -67,20 +67,24 @@ func (r *Fiber) Listen(address interface{}, tls ...string) { } r.prefork(server, host, tls...) } + // Prefork disabled if r.Banner { fmt.Printf(banner, Version, "", "Express on steriods", host) } + ln, err := net.Listen("tcp4", host) if err != nil { panic(err) } + // enable TLS/HTTPS if len(tls) > 1 { if err := server.ServeTLS(ln, tls[0], tls[1]); err != nil { panic(err) } } + if err := server.Serve(ln); err != nil { panic(err) } @@ -92,6 +96,7 @@ func (r *Fiber) prefork(server *fasthttp.Server, host string, tls ...string) { if !r.child { // Create babies childs := make([]*exec.Cmd, runtime.NumCPU()) + for i := range childs { childs[i] = exec.Command(os.Args[0], "-prefork", "-child") childs[i].Stdout = os.Stdout @@ -100,26 +105,32 @@ func (r *Fiber) prefork(server *fasthttp.Server, host string, tls ...string) { panic(err) } } + for _, child := range childs { if err := child.Wait(); err != nil { panic(err) } } + os.Exit(0) } + // Child proc runtime.GOMAXPROCS(1) + ln, err := reuseport.Listen("tcp4", host) if err != nil { panic(err) } + // enable TLS/HTTPS if len(tls) > 1 { if err := server.ServeTLS(ln, tls[0], tls[1]); err != nil { panic(err) } } + if err := server.Serve(ln); err != nil { panic(err) } diff --git a/methods.go b/methods.go index 9150f34a..1eea8eb4 100644 --- a/methods.go +++ b/methods.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber diff --git a/middleware/cors.go b/middleware/cors.go index a97f9cb0..572592e5 100644 --- a/middleware/cors.go +++ b/middleware/cors.go @@ -1,13 +1,9 @@ package middleware -import ( - "fmt" - - "github.com/gofiber/fiber" -) +import "github.com/gofiber/fiber" // Cors : Enable cross-origin resource sharing (CORS) with various options. -func Cors(c *fiber.Ctx) { - fmt.Println("Cors is still under development, disable until v1.0.0") +func Cors(c *fiber.Ctx, d string) { + c.Set("Access-Control-Allow-Origin", d) c.Next() } diff --git a/request.go b/request.go index 1439172a..243beb8e 100644 --- a/request.go +++ b/request.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber @@ -21,10 +21,12 @@ func (ctx *Ctx) Accepts(offers ...string) string { if len(offers) == 0 { panic("You must provide atleast one content type string") } + h := ctx.Get(fasthttp.HeaderAccept) if h == "" { return offers[0] } + specs := strings.Split(h, ",") for _, offer := range offers { mimetype := getType(offer) @@ -38,9 +40,11 @@ func (ctx *Ctx) Accepts(offers ...string) string { if strings.HasPrefix(spec, "*/*") { return offer } + if strings.HasPrefix(spec, mimetype) { return offer } + if strings.Contains(spec, "/*") { if strings.HasPrefix(spec, strings.Split(mimetype, "/")[0]) { return offer @@ -56,10 +60,12 @@ func (ctx *Ctx) AcceptsCharsets(offers ...string) string { if len(offers) == 0 { panic("You must provide atleast one content type string") } + h := ctx.Get(fasthttp.HeaderAcceptCharset) if h == "" { return offers[0] } + specs := strings.Split(h, ",") for _, offer := range offers { for _, spec := range specs { @@ -80,10 +86,12 @@ func (ctx *Ctx) AcceptsEncodings(offers ...string) string { if len(offers) == 0 { panic("You must provide atleast one content type string") } + h := ctx.Get(fasthttp.HeaderAcceptEncoding) if h == "" { return offers[0] } + specs := strings.Split(h, ",") for _, offer := range offers { for _, spec := range specs { @@ -104,10 +112,12 @@ func (ctx *Ctx) AcceptsLanguages(offers ...string) string { if len(offers) == 0 { panic("You must provide atleast one content type string") } + h := ctx.Get(fasthttp.HeaderAcceptLanguage) if h == "" { return offers[0] } + specs := strings.Split(h, ",") for _, offer := range offers { for _, spec := range specs { @@ -123,8 +133,8 @@ func (ctx *Ctx) AcceptsLanguages(offers ...string) string { return "" } -// BaseUrl : https://gofiber.github.io/fiber/#/context?id=baseurl -func (ctx *Ctx) BaseUrl() string { +// BaseURL : https://gofiber.github.io/fiber/#/context?id=baseurl +func (ctx *Ctx) BaseURL() string { return ctx.Protocol() + "://" + ctx.Hostname() } @@ -134,20 +144,25 @@ func (ctx *Ctx) BasicAuth() (user, pass string, ok bool) { if auth == "" { return } + const prefix = "Basic " + // Case insensitive prefix match. if len(auth) < len(prefix) || !strings.EqualFold(auth[:len(prefix)], prefix) { return } + c, err := base64.StdEncoding.DecodeString(auth[len(prefix):]) if err != nil { return } + cs := getString(c) s := strings.IndexByte(cs, ':') if s < 0 { return } + return cs[:s], cs[s+1:], true } @@ -156,6 +171,7 @@ func (ctx *Ctx) Body(args ...interface{}) string { if len(args) == 0 { return getString(ctx.Fasthttp.Request.Body()) } + if len(args) == 1 { switch arg := args[0].(type) { case string: @@ -176,6 +192,7 @@ func (ctx *Ctx) Cookies(args ...interface{}) string { if len(args) == 0 { return ctx.Get(fasthttp.HeaderCookie) } + switch arg := args[0].(type) { case string: return getString(ctx.Fasthttp.Request.Header.Cookie(arg)) @@ -188,6 +205,7 @@ func (ctx *Ctx) Cookies(args ...interface{}) string { default: return ctx.Get(fasthttp.HeaderCookie) } + return "" } @@ -220,8 +238,8 @@ func (ctx *Ctx) Hostname() string { return getString(ctx.Fasthttp.URI().Host()) } -// Ip : https://gofiber.github.io/fiber/#/context?id=Ip -func (ctx *Ctx) Ip() string { +// IP : https://gofiber.github.io/fiber/#/context?id=Ip +func (ctx *Ctx) IP() string { return ctx.Fasthttp.RemoteIP().String() } @@ -239,6 +257,7 @@ func (ctx *Ctx) Is(ext string) bool { if ext[0] != '.' { ext = "." + ext } + exts, _ := mime.ExtensionsByType(ctx.Get(fasthttp.HeaderContentType)) if len(exts) > 0 { for _, item := range exts { @@ -254,9 +273,9 @@ func (ctx *Ctx) Is(ext string) bool { func (ctx *Ctx) Locals(key string, val ...interface{}) interface{} { if len(val) == 0 { return ctx.Fasthttp.UserValue(key) - } else { - ctx.Fasthttp.SetUserValue(key, val[0]) } + + ctx.Fasthttp.SetUserValue(key, val[0]) return nil } @@ -270,8 +289,8 @@ func (ctx *Ctx) MultipartForm() (*multipart.Form, error) { return ctx.Fasthttp.MultipartForm() } -// OriginalUrl : https://gofiber.github.io/fiber/#/context?id=originalurl -func (ctx *Ctx) OriginalUrl() string { +// OriginalURL : https://gofiber.github.io/fiber/#/context?id=originalurl +func (ctx *Ctx) OriginalURL() string { return getString(ctx.Fasthttp.Request.Header.RequestURI()) } @@ -280,6 +299,7 @@ func (ctx *Ctx) Params(key string) string { if ctx.params == nil { return "" } + for i := 0; i < len(*ctx.params); i++ { if (*ctx.params)[i] == key { return ctx.values[i] @@ -312,7 +332,7 @@ func (ctx *Ctx) Range() { } // Route : https://gofiber.github.io/fiber/#/context?id=route -func (ctx *Ctx) Route() *route { +func (ctx *Ctx) Route() *Route { return ctx.route } diff --git a/response.go b/response.go index 2ada8ab1..dbf3c509 100644 --- a/response.go +++ b/response.go @@ -1,9 +1,10 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber // 🦸 Not all heroes wear capes, thank you to some amazing people // πŸ’– @valyala, @dgrr, @erikdubbelboer, @savsgio, @julienschmidt + package fiber import ( @@ -22,6 +23,7 @@ func (ctx *Ctx) Append(field string, values ...string) { if len(values) == 0 { return } + h := ctx.Get(field) for i := range values { h += h + "," + values[i] @@ -48,6 +50,7 @@ func (ctx *Ctx) ClearCookie(name ...string) { } return } + ctx.Fasthttp.Request.Header.VisitAllCookie(func(k, v []byte) { ctx.Fasthttp.Response.Header.DelClientCookie(getString(k)) }) @@ -56,8 +59,10 @@ func (ctx *Ctx) ClearCookie(name ...string) { // Cookie : https://gofiber.github.io/fiber/#/context?id=cookie func (ctx *Ctx) Cookie(key, value string, options ...interface{}) { cook := &fasthttp.Cookie{} + cook.SetKey(key) cook.SetValue(value) + if len(options) > 0 { switch opt := options[0].(type) { case *Cookie: @@ -73,8 +78,8 @@ func (ctx *Ctx) Cookie(key, value string, options ...interface{}) { if opt.Path != "" { cook.SetPath(opt.Path) } - if opt.HttpOnly { - cook.SetHTTPOnly(opt.HttpOnly) + if opt.HTTPOnly { + cook.SetHTTPOnly(opt.HTTPOnly) } if opt.Secure { cook.SetSecure(opt.Secure) @@ -96,15 +101,18 @@ func (ctx *Ctx) Cookie(key, value string, options ...interface{}) { panic("Invalid cookie options") } } + ctx.Fasthttp.Response.Header.SetCookie(cook) } // Download : https://gofiber.github.io/fiber/#/context?id=download func (ctx *Ctx) Download(file string, name ...string) { filename := filepath.Base(file) + if len(name) > 0 { filename = name[0] } + ctx.Set(fasthttp.HeaderContentDisposition, "attachment; filename="+filename) ctx.SendFile(file) } @@ -117,7 +125,9 @@ func (ctx *Ctx) End() { // Format : https://gofiber.github.io/fiber/#/context?id=format func (ctx *Ctx) Format(args ...interface{}) { var body string + accept := ctx.Accepts("html", "json") + for i := range args { switch arg := args[i].(type) { case string: @@ -131,7 +141,7 @@ func (ctx *Ctx) Format(args ...interface{}) { case "html": ctx.SendString("

" + body + "

") case "json": - ctx.Json(body) + ctx.JSON(body) default: ctx.SendString(body) } @@ -143,20 +153,22 @@ func (ctx *Ctx) HeadersSent() { } -// Json : https://gofiber.github.io/fiber/#/context?id=json -func (ctx *Ctx) Json(v interface{}) error { +// JSON : https://gofiber.github.io/fiber/#/context?id=json +func (ctx *Ctx) JSON(v interface{}) error { raw, err := jsoniter.Marshal(&v) if err != nil { return err } - ctx.Fasthttp.Response.Header.SetContentType(contentTypeJson) + + ctx.Fasthttp.Response.Header.SetContentType(contentTypeJSON) ctx.Fasthttp.Response.SetBodyString(getString(raw)) + return nil } -// JsonBytes : https://gofiber.github.io/fiber/#/context?id=jsonbytes -func (ctx *Ctx) JsonBytes(raw []byte) { - ctx.Fasthttp.Response.Header.SetContentType(contentTypeJson) +// JSONBytes : https://gofiber.github.io/fiber/#/context?id=jsonbytes +func (ctx *Ctx) JSONBytes(raw []byte) { + ctx.Fasthttp.Response.Header.SetContentType(contentTypeJSON) ctx.Fasthttp.Response.SetBodyString(getString(raw)) } @@ -166,6 +178,7 @@ func (ctx *Ctx) Jsonp(v interface{}, cb ...string) error { if err != nil { return err } + str := "callback(" if len(cb) > 0 { str = cb[0] + "(" @@ -175,12 +188,13 @@ func (ctx *Ctx) Jsonp(v interface{}, cb ...string) error { ctx.Set(fasthttp.HeaderXContentTypeOptions, "nosniff") ctx.Fasthttp.Response.Header.SetContentType(contentTypeJs) ctx.Fasthttp.Response.SetBodyString(str) + return nil } -// JsonString : https://gofiber.github.io/fiber/#/context?id=jsonstring -func (ctx *Ctx) JsonString(raw string) { - ctx.Fasthttp.Response.Header.SetContentType(contentTypeJson) +// JSONString : https://gofiber.github.io/fiber/#/context?id=jsonstring +func (ctx *Ctx) JSONString(raw string) { + ctx.Fasthttp.Response.Header.SetContentType(contentTypeJSON) ctx.Fasthttp.Response.SetBodyString(raw) } @@ -194,6 +208,7 @@ func (ctx *Ctx) Links(link ...string) { h += `; rel="` + l + `",` } } + if len(link) > 0 { h = strings.TrimSuffix(h, ",") ctx.Set(fasthttp.HeaderLink, h) @@ -219,6 +234,7 @@ func (ctx *Ctx) Redirect(path string, status ...int) { if len(status) > 0 { code = status[0] } + ctx.Set(fasthttp.HeaderLocation, path) ctx.Fasthttp.Response.SetStatusCode(code) } @@ -233,6 +249,7 @@ func (ctx *Ctx) Send(args ...interface{}) { if len(args) == 0 { return } + switch body := args[0].(type) { case string: ctx.Fasthttp.Response.SetBodyString(body) @@ -255,6 +272,7 @@ func (ctx *Ctx) SendFile(file string, gzip ...bool) { fasthttp.ServeFileUncompressed(ctx.Fasthttp, file) return } + fasthttp.ServeFile(ctx.Fasthttp, file) // https://github.com/valyala/fasthttp/blob/master/fs.go#L81 //ctx.Type(filepath.Ext(path)) @@ -264,6 +282,7 @@ func (ctx *Ctx) SendFile(file string, gzip ...bool) { // SendStatus : https://gofiber.github.io/fiber/#/context?id=sendstatus func (ctx *Ctx) SendStatus(status int) { ctx.Fasthttp.Response.SetStatusCode(status) + // Only set status body when there is no response body if len(ctx.Fasthttp.Response.Body()) == 0 { msg := getStatus(status) @@ -300,12 +319,14 @@ func (ctx *Ctx) Vary(fields ...string) { if len(fields) == 0 { return } + vary := ctx.Get(fasthttp.HeaderVary) for _, field := range fields { if !strings.Contains(vary, field) { vary += ", " + field } } + ctx.Set(fasthttp.HeaderVary, vary) } @@ -323,13 +344,15 @@ func (ctx *Ctx) Write(args ...interface{}) { } } -// Xml : https://gofiber.github.io/fiber/#/context?id=xml -func (ctx *Ctx) Xml(v interface{}) error { +// XML : https://gofiber.github.io/fiber/#/context?id=xml +func (ctx *Ctx) XML(v interface{}) error { raw, err := xml.Marshal(v) if err != nil { return err } - ctx.Fasthttp.Response.Header.SetContentType(contentTypeXml) + + ctx.Fasthttp.Response.Header.SetContentType(contentTypeXML) ctx.Fasthttp.Response.SetBody(raw) + return nil } diff --git a/router.go b/router.go index 2ff25d21..01377d24 100644 --- a/router.go +++ b/router.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber @@ -14,10 +14,11 @@ import ( "github.com/valyala/fasthttp" ) -type route struct { +// Route : struct +type Route struct { // HTTP method in uppercase, can be a * for Use() & All() Method string - // Stores the orignal path + // Stores the original path Path string // Bool that defines if the route is a Use() middleware Midware bool @@ -35,13 +36,16 @@ type route struct { func (r *Fiber) register(method string, args ...interface{}) { // Set if method is Use() midware var midware = method == "MIDWARE" + // Match any method if method == "ALL" || midware { method = "*" } + // Prepare possible variables var path string // We could have a path/prefix var handler func(*Ctx) // We could have a ctx handler + // Only 1 argument, so no path/prefix if len(args) == 1 { handler = args[0].(func(*Ctx)) @@ -52,49 +56,59 @@ func (r *Fiber) register(method string, args ...interface{}) { panic("Invalid path, must begin with slash '/' or wildcard '*'") } } + if midware && strings.Contains(path, "/:") { panic("You cannot use :params in Use()") } + // If Use() path == "/", match anything aka * if midware && path == "/" { path = "*" } + // If the route needs to match any path if path == "" || path == "*" || path == "/*" { - r.routes = append(r.routes, &route{method, path, midware, true, nil, nil, handler}) - return - } - // Get params from path - params := getParams(path) - // If path has no params (simple path), we dont need regex (also for use()) - if midware || len(params) == 0 { - r.routes = append(r.routes, &route{method, path, midware, false, nil, nil, handler}) + r.routes = append(r.routes, &Route{method, path, midware, true, nil, nil, handler}) return } - // We have parametes, so we need to compile regix from the path + // Get params from path + params := getParams(path) + + // If path has no params (simple path), we don't need regex (also for use()) + if midware || len(params) == 0 { + r.routes = append(r.routes, &Route{method, path, midware, false, nil, nil, handler}) + return + } + + // We have parametes, so we need to compile regex from the path regex, err := getRegex(path) if err != nil { panic("Invalid url pattern: " + path) } + // Add regex + params to route - r.routes = append(r.routes, &route{method, path, midware, false, regex, params, handler}) + r.routes = append(r.routes, &Route{method, path, midware, false, regex, params, handler}) } // then try to match a route as efficient as possible. func (r *Fiber) handler(fctx *fasthttp.RequestCtx) { found := false + // get custom context from sync pool ctx := acquireCtx(fctx) + // get path and method from main context path := ctx.Path() method := ctx.Method() + // loop trough routes for _, route := range r.routes { // Skip route if method is not allowed if route.Method != "*" && route.Method != method { continue } + // First check if we match a wildcard or static path if route.Wildcard || route.Path == path { // if route.wildcard || (route.path == path && route.params == nil) { @@ -117,6 +131,7 @@ func (r *Fiber) handler(fctx *fasthttp.RequestCtx) { // continue to go to the next route continue } + // If route is Use() and path starts with route.path // aka strings.HasPrefix(route.path, path) if route.Midware && strings.HasPrefix(path, route.Path) { @@ -129,14 +144,17 @@ func (r *Fiber) handler(fctx *fasthttp.RequestCtx) { ctx.next = false continue } + // Skip route if regex does not exist if route.Regex == nil { continue } + // Skip route if regex does not match if !route.Regex.MatchString(path) { continue } + // If we have parameters, lets find the matches if len(route.Params) > 0 { matches := route.Regex.FindAllStringSubmatch(path, -1) @@ -146,23 +164,30 @@ func (r *Fiber) handler(fctx *fasthttp.RequestCtx) { ctx.values = matches[0][1:len(matches[0])] } } + found = true + // Set route pointer if user wants to call .Route() ctx.route = route + // Execute handler with context route.Handler(ctx) + // if next is not set, leave loop and release ctx if !ctx.next { break } + // set next to false for next iteration ctx.next = false } + // No routes found if !found { // Custom 404 handler? ctx.Status(404).Send("Not Found") } + // release context back into sync pool releaseCtx(ctx) } diff --git a/static.go b/static.go index d42cac90..46629ab5 100644 --- a/static.go +++ b/static.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber @@ -19,6 +19,7 @@ func (r *Fiber) Static(args ...string) { wildcard := false // enable / disable gzipping somewhere? gzip := true + if len(args) == 1 { root = args[0] } else if len(args) == 2 { @@ -28,36 +29,44 @@ func (r *Fiber) Static(args ...string) { prefix = "/" + prefix } } + // Check if wildcard for single files if prefix == "*" || prefix == "/*" { wildcard = true } + // Lets get all files from root files, _, err := getFiles(root) if err != nil { panic(err) } + // ./static/compiled => static/compiled mount := filepath.Clean(root) + // Loop over all files for _, file := range files { // Ignore the .gzipped files by fasthttp if strings.Contains(file, ".fasthttp.gz") { continue } + // Time to create a fake path for the route match // static/index.html => /index.html path := filepath.Join(prefix, strings.Replace(file, mount, "", 1)) + // Store original file path to use in ctx handler filePath := file + // If the file is an index.html, bind the prefix to index.html directly if filepath.Base(filePath) == "index.html" || filepath.Base(filePath) == "index.htm" { - r.routes = append(r.routes, &route{"GET", prefix, wildcard, false, nil, nil, func(c *Ctx) { + r.routes = append(r.routes, &Route{"GET", prefix, wildcard, false, nil, nil, func(c *Ctx) { c.SendFile(filePath, gzip) }}) } + // Add the route + SendFile(filepath) to routes - r.routes = append(r.routes, &route{"GET", path, wildcard, false, nil, nil, func(c *Ctx) { + r.routes = append(r.routes, &Route{"GET", path, wildcard, false, nil, nil, func(c *Ctx) { c.SendFile(filePath, gzip) }}) } diff --git a/status.go b/status.go index 8aadaa87..eeead617 100644 --- a/status.go +++ b/status.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber diff --git a/types.go b/types.go index 99ef50c7..7b6bc1f1 100644 --- a/types.go +++ b/types.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber @@ -9,9 +9,9 @@ package fiber // common content types const ( - contentTypeJson = "application/json" + contentTypeJSON = "application/json" contentTypeJs = "application/javascript" - contentTypeXml = "application/xml" + contentTypeXML = "application/xml" contentTypeOctetStream = "application/octet-stream" ) diff --git a/utils.go b/utils.go index a41ebb34..7d103286 100644 --- a/utils.go +++ b/utils.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber @@ -29,6 +29,7 @@ func getParams(path string) (params []string) { } return params } + func getRegex(path string) (*regexp.Regexp, error) { pattern := "^" segments := strings.Split(path, "/") @@ -49,6 +50,7 @@ func getRegex(path string) (*regexp.Regexp, error) { regex, err := regexp.Compile(pattern) return regex, err } + func getFiles(root string) (files []string, isDir bool, err error) { err = filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if !info.IsDir() { @@ -60,6 +62,7 @@ func getFiles(root string) (files []string, isDir bool, err error) { }) return files, isDir, err } + func getType(ext string) (mime string) { if ext[0] == '.' { ext = ext[1:] @@ -70,12 +73,15 @@ func getType(ext string) (mime string) { } return mime } + func getStatus(status int) (msg string) { return statusMessages[status] } + func getString(b []byte) string { return *(*string)(unsafe.Pointer(&b)) } + func getBytes(s string) []byte { return *(*[]byte)(unsafe.Pointer(&s)) } From 6d3e0b9c10bbc1ab57a8b4fadf094a82952a84c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 19:43:42 +0300 Subject: [PATCH 11/17] Create go.sum --- go.sum | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 go.sum diff --git a/go.sum b/go.sum new file mode 100644 index 00000000..bf713905 --- /dev/null +++ b/go.sum @@ -0,0 +1,29 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/klauspost/compress v1.8.2 h1:Bx0qjetmNjdFXASH02NSAREKpiaDwkO1DRZ3dV2KCcs= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.1 h1:vJi+O/nMdFt0vqm8NZBI6wzALWdA2X+egi0ogNyrC/w= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.8.0 h1:actnGGBYtGQmxVaZxyZpp57Vcc2NhcO7mMN0IMwCC0w= +github.com/valyala/fasthttp v1.8.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a h1:0R4NLDRDZX6JcmhJgXi5E4b8Wg84ihbmUKp/GvSPEzc= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= From 939d63f4f6dc72d4009dc9bce2fd70c27c394e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 22:38:22 +0300 Subject: [PATCH 12/17] Fix two gosec issues --- request.go | 5 ++++- response.go | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/request.go b/request.go index 243beb8e..4038c0e7 100644 --- a/request.go +++ b/request.go @@ -9,6 +9,7 @@ package fiber import ( "encoding/base64" + "log" "mime" "mime/multipart" "strings" @@ -338,7 +339,9 @@ func (ctx *Ctx) Route() *Route { // SaveFile : https://gofiber.github.io/fiber/#/context?id=secure func (ctx *Ctx) SaveFile(fh *multipart.FileHeader, path string) { - fasthttp.SaveMultipartFile(fh, path) + if err := fasthttp.SaveMultipartFile(fh, path); err != nil { + log.Fatal(err) + } } // Secure : https://gofiber.github.io/fiber/#/context?id=secure diff --git a/response.go b/response.go index dbf3c509..c4ad49a3 100644 --- a/response.go +++ b/response.go @@ -10,6 +10,7 @@ package fiber import ( "encoding/xml" "fmt" + "log" "path/filepath" "strings" "time" @@ -141,7 +142,9 @@ func (ctx *Ctx) Format(args ...interface{}) { case "html": ctx.SendString("

" + body + "

") case "json": - ctx.JSON(body) + if err := ctx.JSON(body); err != nil { + log.Fatal(err) + } default: ctx.SendString(body) } From 342b34b80bcfcbb612527c09d78cf7c5c28a47d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sun, 2 Feb 2020 12:30:59 +0300 Subject: [PATCH 13/17] Fix typo for functions in Docs, Improve middleware/cors.go --- docs/context.md | 64 +++++++++++++++++++++++----------------------- docs/examples.md | 2 +- docs/functions.txt | 8 +++--- middleware/cors.go | 3 ++- request.go | 4 +-- response.go | 4 +-- 6 files changed, 44 insertions(+), 41 deletions(-) diff --git a/docs/context.md b/docs/context.md index 60178a17..33b8faa9 100644 --- a/docs/context.md +++ b/docs/context.md @@ -141,7 +141,7 @@ app.Get("/", func(c *fiber.Ctx) { }) ``` -#### BaseUrl +#### BaseURL #### AcceptsLanguages @@ -149,12 +149,12 @@ Returns the base URL, protocol and hostname combined. ```go // Function signature -c.BaseUrl() bool +c.BaseURL() bool // Example app.Get("/", func(c *fiber.Ctx) { // http://webtech.oregonstate.edu/faq/page/2?sort=date - c.BaseUrl() + c.BaseURL() // => "http://webtech.oregonstate.edu" }) ``` @@ -512,13 +512,13 @@ app.Get("/", func(c *fiber.Ctx) { }) ``` -#### Json +#### JSON Converts any interface or string to json using [Jsoniter](https://github.com/json-iterator/go), this function also sets the content header to application/json. ```go // Function signature -c.Json(v interface{}) error +c.JSON(v interface{}) error // Example type SomeStruct struct { @@ -532,10 +532,10 @@ app.Get("/json", func(c *fiber.Ctx) { Name: "Grame", Age: 20, } - c.Json(data) + c.JSON(data) // => "{"Name": "Grame", "Age": 20}" - c.Json("Hello, World!") + c.JSON("Hello, World!") // => "Hello, World!" }) app.Listen(8080) @@ -549,73 +549,73 @@ app.Get("/json", func(c *fiber.Ctx) { Name: "Grame", Age: 20, } - if err := c.Json(data); err != nil { + if err := c.JSON(data); err != nil { c.Status(500).Send("Bad Request") } // => "{"Name": "Grame", "Age": 20}" }) ``` -#### JsonBytes +#### JSONBytes This function accepts raw []byte bodies and sets the content header to application/json. This function is used if you do not need type assertion. ```go // Function signature -c.Json(json []byte) +c.JSON(json []byte) // Example app := fiber.New() app.Get("/json", func(c *fiber.Ctx) { - c.JsonBytes([]byte(`"{"hello": "world"}"`)) + c.JSONBytes([]byte(`"{"hello": "world"}"`)) }) app.Listen(8080) ``` -#### Jsonp +#### JSONP -Sends a JSON response with JSONP support. This method is identical to [Json()](#json), except that it opts-in to JSONP callback support. +Sends a JSON response with JSONP support. This method is identical to [JSON()](#json), except that it opts-in to JSONP callback support. By default, the JSONP callback name is simply callback. Override this by passing a named string in the function. ```go // Function signature -c.Jsonp(v interface{}) error -c.Jsonp(v interface{}, callback string) error +c.JSONP(v interface{}) error +c.JSONP(v interface{}, callback string) error // Example -type JsonStruct struct { +type SomeStruct struct { name string age uint8 } app := fiber.New() app.Get("/", func(c *fiber.Ctx) { - data := JsonStruct{ + data := SomeStruct{ name: "Grame", age: 20, } - c.Jsonp(data) + c.JSONP(data) // => callback({"name": "Grame", "age": 20}) - c.Jsonp(data, "customFunc") + c.JSONP(data, "customFunc") // => customFunc({"name": "Grame", "age": 20}) }) app.Listen(8080) ``` -#### JsonString +#### JSONString This function accepts raw string body and sets the content header to application/json. This function is used if you do not need type assertion. ```go // Function signature -c.Json(json string) +c.JSON(json string) // Example app := fiber.New() app.Get("/json", func(c *fiber.Ctx) { - c.JsonString(`"{"hello": "world"}"`) + c.JSONString(`"{"hello": "world"}"`) }) app.Listen(8080) ``` @@ -775,18 +775,18 @@ app.Get("/", func(c *fiber.Ctx) { }) ``` -#### OriginalUrl +#### OriginalURL Contains the original request URL. ```go // Function signature -c.OriginalUrl() string +c.OriginalURL() string // Example app.Get("/", func(c *fiber.Ctx) { // GET /search?q=something - c.OriginalUrl() + c.OriginalURL() // => '/search?q=something' }) ``` @@ -1164,28 +1164,28 @@ app.Get("/", func(c *fiber.Ctx) { }) ``` -#### Xhr +#### XHR A Boolean property that is true if the request’s **X-Requested-With** header field is **XMLHttpRequest**, indicating that the request was issued by a client library such as [jQuery](https://api.jquery.com/jQuery.ajax/). ```go // Function signature -c.Xhr() bool +c.XHR() bool // Example app.Get("/", func(c *fiber.Ctx) { - c.Xhr() + c.XHR() // => true }) ``` -#### Xml +#### XML -Xml sets the header to "application/xml" and marshals your interface to xml. +XML sets the header to "application/xml" and marshals your interface to xml. ```go // Function signature -c.Xml(xml interface{}) error +c.XML(xml interface{}) error // Example type person struct { @@ -1195,7 +1195,7 @@ type person struct { app := fiber.New() app.Get("/", func(c *fiber.Ctx) { - c.Xml(person{"John", 50}) + c.XML(person{"John", 50}) // => Content-Type: application/xml // => John50 diff --git a/docs/examples.md b/docs/examples.md index 87400fc3..20839b45 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -109,7 +109,7 @@ func main() { Name: "John", `json:"name"` Age: 20, `json:"age"` } - err := c.Json(data) + err := c.JSON(data) if err != nil { c.SendStatus(500) } diff --git a/docs/functions.txt b/docs/functions.txt index a8365fff..5b9c6254 100644 --- a/docs/functions.txt +++ b/docs/functions.txt @@ -23,14 +23,16 @@ IP Ips Is JSON -Jsonp +JSONP +JSONString +JSONBytes Links Locals Location Method MultipartForm Next -OriginalUrl +OriginalURL Params Path Protocol @@ -54,5 +56,5 @@ Status Subdomains Type Vary -Xhr +XHR XML diff --git a/middleware/cors.go b/middleware/cors.go index 572592e5..170219bb 100644 --- a/middleware/cors.go +++ b/middleware/cors.go @@ -4,6 +4,7 @@ import "github.com/gofiber/fiber" // Cors : Enable cross-origin resource sharing (CORS) with various options. func Cors(c *fiber.Ctx, d string) { - c.Set("Access-Control-Allow-Origin", d) + c.Set("Access-Control-Allow-Origin", d) // Set d to "*" for allow all domains + c.Set("Access-Control-Allow-Headers", "X-Requested-With") c.Next() } diff --git a/request.go b/request.go index 4038c0e7..22eb0142 100644 --- a/request.go +++ b/request.go @@ -366,7 +366,7 @@ func (ctx *Ctx) Subdomains() (subs []string) { return subs } -// Xhr : https://gofiber.github.io/fiber/#/context?id=xhr -func (ctx *Ctx) Xhr() bool { +// XHR : https://gofiber.github.io/fiber/#/context?id=xhr +func (ctx *Ctx) XHR() bool { return ctx.Get("X-Requested-With") == "XMLHttpRequest" } diff --git a/response.go b/response.go index c4ad49a3..f21ce8cb 100644 --- a/response.go +++ b/response.go @@ -175,8 +175,8 @@ func (ctx *Ctx) JSONBytes(raw []byte) { ctx.Fasthttp.Response.SetBodyString(getString(raw)) } -// Jsonp : https://gofiber.github.io/fiber/#/context?id=jsonp -func (ctx *Ctx) Jsonp(v interface{}, cb ...string) error { +// JSONP : https://gofiber.github.io/fiber/#/context?id=jsonp +func (ctx *Ctx) JSONP(v interface{}, cb ...string) error { raw, err := jsoniter.Marshal(&v) if err != nil { return err From ce04d3200884a8f28b217c2e55c9239423d073d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sun, 2 Feb 2020 12:45:19 +0300 Subject: [PATCH 14/17] Add GitHub issue templates --- .github/FUNDING.yml | 8 +++++ .github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 19 ++++++++++++ .github/config.yml | 14 +++++++++ .github/stale.yml | 26 ++++++++++++++++ 5 files changed, 105 insertions(+) create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/config.yml create mode 100644 .github/stale.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..f53dc3b9 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,8 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +custom: # Replace with a single custom sponsorship URL diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..d0939613 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "[🐞] " +labels: "" +assignees: "" +--- + +**Your environment:** + +- Fiber Web Framework [e.g. `1.2.3`]: +- OS [e.g. `macOS 10.14.6`]: +- Golang [e.g. `1.13.7`]: + +## Describe the bug + +A clear and concise description of what the bug is. + +## To Reproduce + +Steps to reproduce the behavior: + +1. Create func '...' +2. Run '...' +3. ... +4. See error + +## Expected behavior + +A clear and concise description of what you expected to happen. + +### Screenshots + +If applicable, add screenshots to help explain your problem. + +### Additional context + +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..fc4bd434 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "[πŸ”₯] " +labels: "" +assignees: "" +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/config.yml b/.github/config.yml new file mode 100644 index 00000000..ef12862e --- /dev/null +++ b/.github/config.yml @@ -0,0 +1,14 @@ +# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome +# Comment to be posted to on first time issues +newIssueWelcomeComment: > + Thanks for opening your first issue here! πŸŽ‰ Be sure to follow the issue template! + +# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome +# Comment to be posted to on PRs from first time contributors in your repository +newPRWelcomeComment: > + Thanks for opening this pull request! πŸŽ‰ Please check out our contributing guidelines. + +# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge +# Comment to be posted to on pull requests merged by a first time user +firstPRMergeComment: > + Congrats on merging your first pull request! πŸŽ‰ We here at behaviorbot are proud of you! \ No newline at end of file diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000..3c82d70d --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,26 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 + +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 + +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security + +# Label to use when marking an issue as stale +staleLabel: wontfix + +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + πŸ‘‹ Hello. Is this still relevant? If so, what is blocking it? Is there + anything you can do to help move it forward? + + > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. + + Thank you for your contributions. + +# Comment to post when closing a stale Issue or Pull Request. Set to `false` to disable +closeComment: > + ⚑️ This issue has been automatically closed because it has not had recent activity. \ No newline at end of file From bf9981d964280219ed89afd9a3dd7a2e6a462431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sun, 2 Feb 2020 12:49:41 +0300 Subject: [PATCH 15/17] Some fix for GitHub issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 4 +++- .github/ISSUE_TEMPLATE/feature_request.md | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index d0939613..8a8e29a8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -6,6 +6,8 @@ labels: "" assignees: "" --- +☝️ **Don't forget to add title above!** ☝️ + **Your environment:** - Fiber Web Framework [e.g. `1.2.3`]: @@ -16,7 +18,7 @@ assignees: "" A clear and concise description of what the bug is. -## To Reproduce +## To reproduce Steps to reproduce the behavior: diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index fc4bd434..a45c085c 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -6,6 +6,8 @@ labels: "" assignees: "" --- +☝️ **Don't forget to add title above!** ☝️ + **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] From 29accc4fd19e6784937618ad7c019ddc8f7d2a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sun, 2 Feb 2020 13:15:42 +0300 Subject: [PATCH 16/17] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index af1e8cee..0e093477 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # πŸ”Œ Fiber Web Framework -[![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) +[![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) [![GitHub license](https://img.shields.io/github/license/gofiber/fiber.svg)](https://github.com/gofiber/fiber/blob/master/LICENSE) [![Join the chat at https://gitter.im/FiberGo/community](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/FiberGo/community) Fiber logo From 6ee64b245811768597eb5463b6efa8f8b605229e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sun, 2 Feb 2020 13:16:15 +0300 Subject: [PATCH 17/17] Update README_RU.md --- README_RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_RU.md b/README_RU.md index d83971e6..2d95039f 100644 --- a/README_RU.md +++ b/README_RU.md @@ -1,6 +1,6 @@ # πŸ”Œ Π’Π΅Π± Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Fiber -[![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) +[![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) [![GitHub license](https://img.shields.io/github/license/gofiber/fiber.svg)](https://github.com/gofiber/fiber/blob/master/LICENSE) [![Join the chat at https://gitter.im/FiberGo/community](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/FiberGo/community) Fiber logo

j>FiX>lPP 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 literal 0 HcmV?d00001 From dfd8366ce59e9ddfd7b4cadd74623cccead78340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 18:22:45 +0300 Subject: [PATCH 06/17] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fcdf79a5..af538b97 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ -# πŸ”Œ Fiber Web Framework en ru +# πŸ”Œ Fiber Web Framework [![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) - +Fiber logo **[Fiber](https://github.com/gofiber/fiber)** is an [Express](https://expressjs.com/en/4x/api.html)-styled HTTP web framework implementation running on [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for Go (Golang). The package make use of **similar framework convention** as they are in Express. People switching from [Node.js](https://nodejs.org/en/about/) to [Go](https://golang.org/doc/) often end up in a bad learning curve to start building their webapps, this project is meant to **ease** things up for **fast** development, but with **zero memory allocation** and **performance** in mind. +**In other languages:** ru + ## API Documentation πŸ“š We created an extended API documentation (_including examples_), **[click here](https://gofiber.github.io/fiber/)**. From ba9396b58de7080aa11d23c5707915c9849b4bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 18:48:36 +0300 Subject: [PATCH 07/17] Create README_RU.md --- README_RU.md | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 README_RU.md diff --git a/README_RU.md b/README_RU.md new file mode 100644 index 00000000..fa6b68a7 --- /dev/null +++ b/README_RU.md @@ -0,0 +1,156 @@ +# πŸ”Œ Π’Π΅Π± Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Fiber + +[![](https://img.shields.io/github/release/gofiber/fiber)](https://github.com/gofiber/fiber/releases) ![](https://img.shields.io/github/languages/top/gofiber/fiber) [![](https://godoc.org/github.com/gofiber/fiber?status.svg)](https://godoc.org/github.com/gofiber/fiber) ![](https://goreportcard.com/badge/github.com/gofiber/fiber) + +Fiber logo + +**[Fiber](https://github.com/gofiber/fiber)** β€” это [Express](https://expressjs.com/en/4x/api.html)-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ HTTP Π²Π΅Π± Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ всю ΠΌΠΎΡ‰ΡŒ [Fasthttp](https://github.com/valyala/fasthttp), самого **быстрого** HTTP Π΄Π²ΠΈΠΆΠΊΠ° для Go (Golang). ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ **Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ** схСму имСнования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Ρƒ Express. + +Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΈΠ· [Node.js](https://nodejs.org/en/about/) Π² [Go](https://golang.org/doc/) ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽΡ‚ трудности ΠΏΡ€ΠΈ созданиии своих ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΠ·Π²Π°Π½, Π² Ρ‚ΠΎΠΌ числС, **ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ** процСсс ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° для Ρ‚Π°ΠΊΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². + +**На Π΄Ρ€ΡƒΠ³ΠΈΡ… языках:** en + +## ДокумСнтация ΠΏΠΎ API + +πŸ“š ΠœΡ‹ создали Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ API (_Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹_), **[ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ](https://gofiber.github.io/fiber/)**. + +## Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ + +[![](https://gofiber.github.io/fiber/static/benchmarks/benchmark.png)](https://gofiber.github.io/fiber/#/benchmarks) + +πŸ‘‰ **[Click here](https://gofiber.github.io/fiber/#/benchmarks)** to see all benchmark results. + +## ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ + +* ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для скорости ΠΈ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ использования памяти +* БыстроС Server-Side ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ +* ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ +* БтатичСскиС Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ прСфиксом +* Middleware с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ `Next()` +* Endpoints, ΠΊΠ°ΠΊ Ρƒ API Express +* [Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ докумСнтация](https://gofiber.github.io/fiber/) + +## Установка + +ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ ΡƒΠΆΠ΅ установили Go `1.11+` πŸ˜‰ + +Установит ΠΏΠ°ΠΊΠ΅Ρ‚ [Fiber](https://github.com/gofiber/fiber) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² консолС: + +```console +$ go get -u github.com/gofiber/fiber +``` + +## Hello, world! + +Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅, ΠΏΠΎ сути, являСтся самым простым ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ: + +```go +// server.go + +package main + +import "github.com/gofiber/fiber" + +func main() { + // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ инстанса Fiber + app := fiber.New() + + // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° с GET + app.Get("/", func(c *fiber.Ctx) { + c.Send("Hello, World!") + }) + + // Π‘Ρ‚Π°Ρ€Ρ‚ сСрвСра Π½Π° http://localhost:8080 + app.Listen(8080) +} +``` + +ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² консоль ΠΈ запуститС: + +```console +$ go run server.go +``` + +А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ адрСс `http://localhost:8080`. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ надпись `Hello, World!`! πŸŽ‰ + +## Π‘Ρ‚Π°Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ + +Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со статичСскими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ [Static](https://gofiber.github.io/fiber/#/?id=static-files): + +```go +package main + +import "github.com/gofiber/fiber" + +func main() { + // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ инстанса Fiber + app := fiber.New() + + // Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ всСх Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΏΠΊΠ΅ ./public для Ρ€Π°Π±ΠΎΡ‚Ρ‹ + app.Static("./public") + + // Π‘Ρ‚Π°Ρ€Ρ‚ сСрвСра Π½Π° http://localhost:8080 + app.Listen(8080) +} +``` + +Now, you can load the files that are in the public directory: + +```console +http://localhost:8080/hello.html +http://localhost:8080/js/script.js +http://localhost:8080/css/style.css +``` + +## Middleware + +Middleware has never been so easy, just like Express you call the `Next()` matching route function! + +```go +package main + +import "github.com/gofiber/fiber" + +func main() { + // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ инстанса Fiber + app := fiber.New() + + // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ middlewares + // с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Use() + + app.Use(func(c *fiber.Ctx) { + c.Write("Match anything!\n") + c.Next() + }) + + app.Use("/api", func(c *fiber.Ctx) { + c.Write("Match starting with /api\n") + c.Next() + }) + + app.Get("/api/user", func(c *fiber.Ctx) { + c.Write("Match exact path /api/user\n") + }) + + // Π‘Ρ‚Π°Ρ€Ρ‚ сСрвСра Π½Π° http://localhost:8080 + app.Listen(8080) +} +``` + +## ΠŸΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ + +Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ «спасибо» ΠΈ/ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ `gofiber/fiber`: + +1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΡƒ GitHub этому Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. +2. ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Ρ‚Π²ΠΈΡ‚ ΠΎΠ± этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ [Π² свой Twitter](https://twitter.com/intent/tweet?text=%F0%9F%94%8C%20Fiber%20is%20an%20Express.js%20inspired%20Go%20web%20framework%20build%20on%20%F0%9F%9A%80%20Fasthttp%20https%3A%2F%2Fgithub.com%2Fgofiber%2Ffiber). +3. ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ Π½Π°ΠΌ пСрСвСсти `README` ΠΈ [Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ API](https://gofiber.github.io/fiber/) Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык. + +Бпасибо Π·Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ! 😘 ВмСстС ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ `Fiber Web Framework` Π»ΡƒΡ‡ΡˆΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь. + +## Π—Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠΈ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ + +[![Stargazers over time](https://starchart.cc/gofiber/fiber.svg)](https://starchart.cc/gofiber/fiber) + +## ЛицСнзия + +⚠️ _ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:_ `gofiber/fiber` являСтся свободным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ обСспСчСниСм с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ Π² соотвСтствии с [MIT License](LICENSE). From 01386b50078fb659079468bbafbbc9782f1d9f85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 18:54:15 +0300 Subject: [PATCH 08/17] Update README_RU.md --- README_RU.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README_RU.md b/README_RU.md index fa6b68a7..03feb546 100644 --- a/README_RU.md +++ b/README_RU.md @@ -75,7 +75,7 @@ $ go run server.go ## Π‘Ρ‚Π°Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ -Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со статичСскими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ [Static](https://gofiber.github.io/fiber/#/?id=static-files): +Для получСния доступа ΠΊ статичным Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ [Static](https://gofiber.github.io/fiber/#/?id=static-files): ```go package main @@ -94,7 +94,7 @@ func main() { } ``` -Now, you can load the files that are in the public directory: +Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊΠΎ всСм Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² ΠΏΠ°ΠΏΠΊΠ΅ `./public`: ```console http://localhost:8080/hello.html @@ -104,7 +104,7 @@ http://localhost:8080/css/style.css ## Middleware -Middleware has never been so easy, just like Express you call the `Next()` matching route function! +Π•Ρ‰Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π° с middleware Π½Π΅ Π±Ρ‹Π»Π° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ простой! Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Express, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ `Next()` для дальнСйшСго слСдования ΠΏΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°ΠΌ Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π°: ```go package main From 825f4936f71970a5167e54e2c3678e3d45d732b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 18:55:36 +0300 Subject: [PATCH 09/17] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index af538b97..3d6bbdd3 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ $ go get -u github.com/gofiber/fiber ## Hello, world! -Embedded below is essentially the simplest Fiber app you can create. +Embedded below is essentially the simplest Fiber app you can create: ```go // server.go @@ -75,7 +75,7 @@ And now, browse to `http://localhost:8080` and you should see `Hello, World!` on ## Static files -To serve static files, use the [Static](https://gofiber.github.io/fiber/#/?id=static-files) method. +To serve static files, use the [Static](https://gofiber.github.io/fiber/#/?id=static-files) method: ```go package main @@ -104,7 +104,7 @@ http://localhost:8080/css/style.css ## Middleware -Middleware has never been so easy, just like Express you call the `Next()` matching route function! +Middleware has never been so easy! Just like Express you call the `Next()` matching route function: ```go package main From 18e7fcfc35382cfdab3960330ca24dea4aa1eb8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vic=20Sh=C3=B3stak?= Date: Sat, 1 Feb 2020 19:42:40 +0300 Subject: [PATCH 10/17] Huge refactoring, Add dummy CORS middleware --- README.md | 36 ++++----- README_RU.md | 40 +++++----- application.go | 5 +- context.go | 10 +-- docs/application.md | 34 +++++++-- docs/benchmarks.md | 27 +++---- docs/context.md | 132 ++++++++++++++++++++++++++++++--- docs/examples.md | 14 +++- docs/functions.txt | 8 +- docs/getting_started.md | 37 ++++++--- docs/license.md | 8 +- docs/routing.md | 9 ++- docs/static/{ => flags}/en.svg | 0 docs/static/{ => flags}/ru.svg | 0 go.sum | 26 ------- listen.go | 13 +++- methods.go | 2 +- middleware/cors.go | 10 +-- request.go | 40 +++++++--- response.go | 55 ++++++++++---- router.go | 51 +++++++++---- static.go | 15 +++- status.go | 2 +- types.go | 6 +- utils.go | 8 +- 25 files changed, 411 insertions(+), 177 deletions(-) rename docs/static/{ => flags}/en.svg (100%) rename docs/static/{ => flags}/ru.svg (100%) delete mode 100644 go.sum diff --git a/README.md b/README.md index 3d6bbdd3..af1e8cee 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ Fiber logo -**[Fiber](https://github.com/gofiber/fiber)** is an [Express](https://expressjs.com/en/4x/api.html)-styled HTTP web framework implementation running on [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for Go (Golang). The package make use of **similar framework convention** as they are in Express. +**[Fiber](https://github.com/gofiber/fiber)** is an [Express](https://expressjs.com/en/4x/api.html)-styled HTTP web framework implementation running on [Fasthttp](https://github.com/valyala/fasthttp), the **fastest** HTTP engine for Go (Golang). The package make use of **similar framework convention** as they are in Express. People switching from [Node.js](https://nodejs.org/en/about/) to [Go](https://golang.org/doc/) often end up in a bad learning curve to start building their webapps, this project is meant to **ease** things up for **fast** development, but with **zero memory allocation** and **performance** in mind. -**In other languages:** ru +**In other languages:** ru ## API Documentation @@ -22,13 +22,13 @@ People switching from [Node.js](https://nodejs.org/en/about/) to [Go](https://go ## Features -* Optimized for speed and low memory usage -* Rapid Server-Side Programming -* Easy routing with parameters -* Static files with custom prefix -* Middleware with Next support -* Express API endpoints -* [Extended documentation](https://gofiber.github.io/fiber/) +- Optimized for speed and low memory usage +- Rapid Server-Side Programming +- Easy routing with parameters +- Static files with custom prefix +- Middleware with Next support +- Express API endpoints +- [Extended documentation](https://gofiber.github.io/fiber/) ## Installing @@ -37,7 +37,7 @@ Assuming you’ve already installed Go `1.11+` πŸ˜‰ Install the [Fiber](https://github.com/gofiber/fiber) package by calling the following command: ```console -$ go get -u github.com/gofiber/fiber +go get -u github.com/gofiber/fiber ``` ## Hello, world! @@ -59,7 +59,7 @@ func main() { app.Get("/", func(c *fiber.Ctx) { c.Send("Hello, World!") }) - + // Start server on http://localhost:8080 app.Listen(8080) } @@ -68,7 +68,7 @@ func main() { Go to console and run: ```console -$ go run server.go +go run server.go ``` And now, browse to `http://localhost:8080` and you should see `Hello, World!` on the page! πŸŽ‰ @@ -85,10 +85,10 @@ import "github.com/gofiber/fiber" func main() { // Create new Fiber instance app := fiber.New() - + // Serve all static files on ./public folder app.Static("./public") - + // Start server on http://localhost:8080 app.Listen(8080) } @@ -116,21 +116,21 @@ func main() { app := fiber.New() // Define all used middlewares in Use() - + app.Use(func(c *fiber.Ctx) { c.Write("Match anything!\n") c.Next() }) - + app.Use("/api", func(c *fiber.Ctx) { c.Write("Match starting with /api\n") c.Next() }) - + app.Get("/api/user", func(c *fiber.Ctx) { c.Write("Match exact path /api/user\n") }) - + // Start server on http://localhost:8080 app.Listen(8080) } diff --git a/README_RU.md b/README_RU.md index 03feb546..d83971e6 100644 --- a/README_RU.md +++ b/README_RU.md @@ -4,11 +4,11 @@ Fiber logo -**[Fiber](https://github.com/gofiber/fiber)** β€” это [Express](https://expressjs.com/en/4x/api.html)-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ HTTP Π²Π΅Π± Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ всю ΠΌΠΎΡ‰ΡŒ [Fasthttp](https://github.com/valyala/fasthttp), самого **быстрого** HTTP Π΄Π²ΠΈΠΆΠΊΠ° для Go (Golang). ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ **Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ** схСму имСнования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Ρƒ Express. +**[Fiber](https://github.com/gofiber/fiber)** β€” это [Express](https://expressjs.com/en/4x/api.html)-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ HTTP Π²Π΅Π± Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ всю ΠΌΠΎΡ‰ΡŒ [Fasthttp](https://github.com/valyala/fasthttp), самого **быстрого** HTTP Π΄Π²ΠΈΠΆΠΊΠ° для Go (Golang). ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ **Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ** схСму имСнования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠ°ΠΊ ΠΈ Ρƒ Express. -Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΈΠ· [Node.js](https://nodejs.org/en/about/) Π² [Go](https://golang.org/doc/) ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽΡ‚ трудности ΠΏΡ€ΠΈ созданиии своих ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΠ·Π²Π°Π½, Π² Ρ‚ΠΎΠΌ числС, **ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ** процСсс ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° для Ρ‚Π°ΠΊΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². +Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΈΠ· [Node.js](https://nodejs.org/en/about/) Π² [Go](https://golang.org/doc/) ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽΡ‚ трудности ΠΏΡ€ΠΈ создании своих ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΠ·Π²Π°Π½, Π² Ρ‚ΠΎΠΌ числС, **ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ** процСсс ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° для Ρ‚Π°ΠΊΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². -**На Π΄Ρ€ΡƒΠ³ΠΈΡ… языках:** en +**На Π΄Ρ€ΡƒΠ³ΠΈΡ… языках:** en ## ДокумСнтация ΠΏΠΎ API @@ -22,13 +22,13 @@ ## ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ -* ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для скорости ΠΈ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ использования памяти -* БыстроС Server-Side ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ -* ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ -* БтатичСскиС Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ прСфиксом -* Middleware с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ `Next()` -* Endpoints, ΠΊΠ°ΠΊ Ρƒ API Express -* [Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ докумСнтация](https://gofiber.github.io/fiber/) +- ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для скорости ΠΈ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ использования памяти +- БыстроС Server-Side ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ +- ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ +- БтатичСскиС Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ прСфиксом +- Middleware с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ `Next()` +- Endpoints, ΠΊΠ°ΠΊ Ρƒ API Express +- [Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ докумСнтация](https://gofiber.github.io/fiber/) ## Установка @@ -37,7 +37,7 @@ Установит ΠΏΠ°ΠΊΠ΅Ρ‚ [Fiber](https://github.com/gofiber/fiber) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² консолС: ```console -$ go get -u github.com/gofiber/fiber +go get -u github.com/gofiber/fiber ``` ## Hello, world! @@ -55,11 +55,11 @@ func main() { // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ инстанса Fiber app := fiber.New() - // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° с GET + // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° с GET app.Get("/", func(c *fiber.Ctx) { c.Send("Hello, World!") }) - + // Π‘Ρ‚Π°Ρ€Ρ‚ сСрвСра Π½Π° http://localhost:8080 app.Listen(8080) } @@ -68,7 +68,7 @@ func main() { ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² консоль ΠΈ запуститС: ```console -$ go run server.go +go run server.go ``` А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ адрСс `http://localhost:8080`. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ надпись `Hello, World!`! πŸŽ‰ @@ -85,10 +85,10 @@ import "github.com/gofiber/fiber" func main() { // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ инстанса Fiber app := fiber.New() - + // Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ всСх Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΏΠΊΠ΅ ./public для Ρ€Π°Π±ΠΎΡ‚Ρ‹ app.Static("./public") - + // Π‘Ρ‚Π°Ρ€Ρ‚ сСрвСра Π½Π° http://localhost:8080 app.Listen(8080) } @@ -117,21 +117,21 @@ func main() { // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ middlewares // с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Use() - + app.Use(func(c *fiber.Ctx) { c.Write("Match anything!\n") c.Next() }) - + app.Use("/api", func(c *fiber.Ctx) { c.Write("Match starting with /api\n") c.Next() }) - + app.Get("/api/user", func(c *fiber.Ctx) { c.Write("Match exact path /api/user\n") }) - + // Π‘Ρ‚Π°Ρ€Ρ‚ сСрвСра Π½Π° http://localhost:8080 app.Listen(8080) } diff --git a/application.go b/application.go index 72f54087..74c26972 100644 --- a/application.go +++ b/application.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber @@ -13,6 +13,7 @@ import ( ) const ( + // Version : Fiber version Version = "1.2.3" // https://play.golang.org/p/r6GNeV1gbH banner = "" + @@ -40,7 +41,7 @@ type Fiber struct { Prefork bool child bool // Stores all routes - routes []*route + routes []*Route } // Fasthttp settings diff --git a/context.go b/context.go index 2528b2f8..879f2610 100644 --- a/context.go +++ b/context.go @@ -1,4 +1,4 @@ -// πŸ”Œ Fiber is an Expressjs inspired web framework build on πŸš€ Fasthttp. +// πŸ”Œ Fiber is an Express.js inspired web framework build on πŸš€ Fasthttp. // πŸ“Œ Please open an issue if you got suggestions or found a bug! // πŸ–₯ https://github.com/gofiber/fiber @@ -13,23 +13,23 @@ import ( "github.com/valyala/fasthttp" ) -// Ctx struct +// Ctx : struct type Ctx struct { - route *route + route *Route next bool params *[]string values []string Fasthttp *fasthttp.RequestCtx } -// Cookie : +// Cookie : struct type Cookie struct { Expire int // time.Unix(1578981376, 0) MaxAge int Domain string Path string - HttpOnly bool + HTTPOnly bool Secure bool SameSite string } diff --git a/docs/application.md b/docs/application.md index de1bcc68..df863cda 100644 --- a/docs/application.md +++ b/docs/application.md @@ -1,8 +1,11 @@ # Application + The app instance conventionally denotes the Fiber application. #### New + Creates an new Fiber instance that we named "**app**". + ```go app := fiber.New() // ... @@ -12,7 +15,9 @@ app.Listen(8080) ``` #### Server + Fiber by default does not send a [server header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server), but you can enable this by changing the server value. + ```go app := fiber.New() @@ -23,7 +28,8 @@ app.Listen(8080) ``` #### Banner -When you launch your Fiber application, the console will print a banner containing the package version and listening port. This is enabled by default, disable it by setting the Banner value to false. + +When you launch your Fiber application, the console will print a banner containing the package version and listening port. This is enabled by default, disable it by setting the Banner value to false. ![](https://i.imgur.com/96l7g9l.png) @@ -36,10 +42,12 @@ app.Listen(8080) ``` #### Engine + You can edit some of the Fasthttp server settings via the Fiber instance. Make sure that you set these settings before calling the [Listen](#listen) method. You can find the description of each value in [Fasthttp server settings](https://github.com/valyala/fasthttp/blob/master/server.go#L150) **Only change these settings if you know what you are doing.** + ```go app := fiber.New() @@ -68,13 +76,14 @@ app.Listen(8080) ``` #### Prefork + Prefork enables use of the **[SO_REUSEPORT](https://lwn.net/Articles/542629/)** socket option, which is available in newer versions of many operating systems, including DragonFly BSD and Linux (kernel version 3.9 and later). This will spawn multiple go processes listening on the same port. NGINX has a great article about [Socket Sharding](https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/), these pictures are taken from the same article. -