1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-23 15:43:42 +00:00
fiber/.github/README_zh-CN.md
2020-09-28 01:17:23 +02:00

33 KiB
Raw Blame History

Fiber

Fiber是一个受到Express启发的Web框架,建立在Go语言写的最快的FasthttpHTTP引擎的基础上。旨在简化 零内存分配提高性能,以便快速开发。

快速入门

package main

import "github.com/gofiber/fiber/v2"

func main() {
	app := fiber.New()

	app.Get("/", func(c *fiber.Ctx) error {
		return c.SendString("Hello, World 👋!")
	})

	app.Listen(":3000")
}

🤖 性能

这些测试由TechEmpowerGo Web 执行。如果要查看所有结果,请访问我们的Wiki

⚙️ 安装

首先, 下载并安装Go。 需要1.14或更高版本。

使用go get命令完成安装:

export GO111MODULE=on
export GOPROXY=https://goproxy.cn

go get github.com/gofiber/fiber/v2

🎯 特点

💡 哲学

Node.js切换到Go的新gopher在开始构建Web应用程序或微服务之前正在应对学习曲线。 Fiber作为一个Web框架 ,是按照极简主义的思想并遵循UNIX方式创建的,因此新的gopher可以在热烈和可信赖的欢迎中迅速进入Go的世界。

Fiber受到了互联网上最流行的Web框架Express启发 。我们结合了Express易用性Go原始性能 。如果您曾经在Node.js上实现过Web应用程序(使用Express或类似工具),那么许多方法和原理对您来说应该非常易懂

我们关注 整个互联网 用户在issues和Discord channel的消息,为了创建一个迅速灵活以及友好Go web框架,满足任何任务,最后期限和开发者技能。就像ExpressJavaScript世界中一样。

👀 示例

下面列出了一些常见示例。如果您想查看更多代码示例,请访问我们的Recipes代码库或API文档

📖 基础路由

func main() {
	app := fiber.New()

	// GET /john
	app.Get("/:name", func(c *fiber.Ctx) error {
		msg := fmt.Sprintf("Hello, %s 👋!", c.Params("name"))
		return c.SendString(msg) // => Hello john 👋!
	})

	// GET /john/75
	app.Get("/:name/:age/:gender?", func(c *fiber.Ctx) error {
		msg := fmt.Sprintf("👴 %s is %s years old", c.Params("name"), c.Params("age"))
		return c.SendString(msg) // => 👴 john is 75 years old
	})

	// GET /dictionary.txt
	app.Get("/:file.:ext", func(c *fiber.Ctx) error {
		msg := fmt.Sprintf("📃 %s.%s", c.Params("file"), c.Params("ext"))
		return c.SendString(msg) // => 📃 dictionary.txt
	})

	// GET /flights/LAX-SFO
	app.Get("/flights/:from-:to", func(c *fiber.Ctx) error {
		msg := fmt.Sprintf("💸 From: %s, To: %s", c.Params("from"), c.Params("to"))
		return c.SendString(msg) // => 💸 From: LAX, To: SFO
	})

	// GET /api/register
	app.Get("/api/*", func(c *fiber.Ctx) error {
		msg := fmt.Sprintf("✋ %s", c.Params("*"))
		return c.SendString(msg) // => ✋ register
	})

	log.Fatal(app.Listen(":3000"))
}

📖 静态文件服务

func main() {
	app := fiber.New()

	app.Static("/", "./public")
	// => http://localhost:3000/js/script.js
	// => http://localhost:3000/css/style.css

	app.Static("/prefix", "./public")
	// => http://localhost:3000/prefix/js/script.js
	// => http://localhost:3000/prefix/css/style.css

	app.Static("*", "./public/index.html")
	// => http://localhost:3000/any/path/shows/index/html

	log.Fatal(app.Listen(":3000"))
}

📖 中间件Next

func main() {
	app := fiber.New()

	// Match any route
	app.Use(func(c *fiber.Ctx) error {
		fmt.Println("🥇 First handler")
		return c.Next()
	})

	// Match all routes starting with /api
	app.Use("/api", func(c *fiber.Ctx) error {
		fmt.Println("🥈 Second handler")
		return c.Next()
	})

	// GET /api/register
	app.Get("/api/list", func(c *fiber.Ctx) error {
		fmt.Println("🥉 Last handler")
		return c.SendString("Hello, World 👋!")
	})

	log.Fatal(app.Listen(":3000"))
}

📚 展示更多代码示例

模版引擎

📖 配置 📖 模版引擎 📖 渲染

如果未设置模版引擎,则Fiber默认使用html/template

如果您要执行部分模版或使用其他引擎,例如amberhandlebarsmustache或者pug等等...

请查看我们的Template包,该包支持多个模版引擎。

package main

import (
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/template/pug"
)

func main() {
	// You can setup Views engine before initiation app:
	app := fiber.New(fiber.Config{
		Views: pug.New("./views", ".pug"),
	})

	// And now, you can call template `./views/home.pug` like this:
	app.Get("/", func(c *fiber.Ctx) error {
		return c.Render("home", fiber.Map{
			"title": "Homepage",
			"year":  1999,
		})
	})

	log.Fatal(app.Listen(":3000"))
}

组合路由链

📖 路由分组

func middleware(c *fiber.Ctx) error {
	fmt.Println("Don't mind me!")
	return c.Next()
}

func handler(c *fiber.Ctx) error {
	return c.SendString(c.Path())
}

func main() {
	app := fiber.New()

	// Root API route
	api := app.Group("/api", middleware) // /api

	// API v1 routes
	v1 := api.Group("/v1", middleware) // /api/v1
	v1.Get("/list", handler)           // /api/v1/list
	v1.Get("/user", handler)           // /api/v1/user

	// API v2 routes
	v2 := api.Group("/v2", middleware) // /api/v2
	v2.Get("/list", handler)           // /api/v2/list
	v2.Get("/user", handler)           // /api/v2/user

	// ...
}

日志中间件

📖 Logger

package main

import (
	"log"

	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/logger"
)

func main() {
	app := fiber.New()

	app.Use(logger.New())

	// ...

	log.Fatal(app.Listen(":3000"))
}

跨域资源共享(CORS)中间件

📖 CORS

import (
	"log"

	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/cors"
)

func main() {
	app := fiber.New()

	app.Use(cors.New())

	// ...

	log.Fatal(app.Listen(":3000"))
}

通过在请求头中设置Origin传递任何域来检查CORS

curl -H "Origin: http://example.com" --verbose http://localhost:3000

自定义404响应

📖 HTTP Methods

func main() {
	app := fiber.New()

	app.Static("/", "./public")

	app.Get("/demo", func(c *fiber.Ctx) error {
		return c.SendString("This is a demo!")
	})

	app.Post("/register", func(c *fiber.Ctx) error {
		return c.SendString("Welcome!")
	})

	// Last middleware to match anything
	app.Use(func(c *fiber.Ctx) error {
		return c.SendStatus(404)
		// => 404 "Not Found"
	})

	log.Fatal(app.Listen(":3000"))
}

JSON响应

📖 JSON

type User struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	app := fiber.New()

	app.Get("/user", func(c *fiber.Ctx) error {
		return c.JSON(&User{"John", 20})
		// => {"name":"John", "age":20}
	})

	app.Get("/json", func(c *fiber.Ctx) error {
		return c.JSON(fiber.Map{
			"success": true,
			"message": "Hi John!",
		})
		// => {"success":true, "message":"Hi John!"}
	})

	log.Fatal(app.Listen(":3000"))
}

升级到WebSocket

📖 Websocket

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/websocket"
)

func main() {
  app := fiber.New()

  app.Get("/ws", websocket.New(func(c *websocket.Conn) {
    for {
      mt, msg, err := c.ReadMessage()
      if err != nil {
        log.Println("read:", err)
        break
      }
      log.Printf("recv: %s", msg)
      err = c.WriteMessage(mt, msg)
      if err != nil {
        log.Println("write:", err)
        break
      }
    }
  }))

  log.Fatal(app.Listen(":3000"))
  // ws://localhost:3000/ws
}

恢复(panic)中间件

📖 Recover

import (
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/recover"
)

func main() {
	app := fiber.New()

	app.Use(recover.New())

	app.Get("/", func(c *fiber.Ctx) error {
		panic("normally this would crash your app")
	})

	log.Fatal(app.Listen(":3000"))
}

🧬 Internal Middleware

Here is a list of middleware that are included within the Fiber framework.

Middleware Description
basicauth Basic auth middleware provides an HTTP basic authentication. It calls the next handler for valid credentials and 401 Unauthorized for missing or invalid credentials.
compress Compression middleware for Fiber, it supports deflate, gzip and brotli by default.
cors Enable cross-origin resource sharing CORS with various options.
csrf Protect from CSRF exploits.
filesystem FileSystem middleware for Fiber, special thanks and credits to Alireza Salary
favicon Ignore favicon from logs or serve from memory if a file path is provided.
limiter Rate-limiting middleware for Fiber. Use to limit repeated requests to public APIs and/or endpoints such as password reset.
logger HTTP request/response logger.
pprof Special thanks to Matthew Lee @mthli
recover Recover middleware recovers from panics anywhere in the stack chain and handles the control to the centralized ErrorHandler.

🧬 External Middleware

List of externally hosted middleware modules and maintained by the Fiber team.

Middleware Description
adaptor Converter for net/http handlers to/from Fiber request handlers, special thanks to @arsmn!
helmet Helps secure your apps by setting various HTTP headers.
jwt JWT returns a JSON Web Token JWT auth middleware.
keyauth Key auth middleware provides a key based authentication.
rewrite Rewrite middleware rewrites the URL path based on provided rules. It can be helpful for backward compatibility or just creating cleaner and more descriptive links.
session This session middleware is build on top of fasthttp/session by @savsgio MIT. Special thanks to @thomasvvugt for helping with this middleware.
template This package contains 8 template engines that can be used with Fiber v1.10.x Go version 1.13 or higher is required.
websocket Based on Fasthttp WebSocket for Fiber with Locals support!

🌱 第三方中间件

这是由Fiber社区创建的中间件列表,如果您想看到自己的中间件,请创建PR

👍 贡献

如果您要说声谢谢或支持Fiber的积极发展:

  1. FiberGitHub Star点个星星。
  2. Twitter上发布有关项目的推文
  3. MediumDev.to或个人博客上写评论或教程。
  4. 通过捐赠一杯咖啡来支持本项目。

支持者

Fibre是一个开源项目,依靠捐赠来支付账单,例如我们的域名,gitbooknetlify和无服务器托管。如果要支持Fiber,可以 在这里买一杯咖啡

User Donation
@destari x 10
@dembygenesis x 5
@thomasvvugt x 5
@hendratommy x 5
@ekaputra07 x 5
@jorgefuertes x 5
@candidosales x 5
@l0nax x 3
@ankush x 3
@bihe x 3
@justdave x 3
@koddr x 1
@lapolinar x 1
@diegowifi x 1
@ssimk0 x 1
@raymayemir x 1
@melkorm x 1
@marvinjwendt x 1
@toishy x 1

💻 Code Contributors

Code Contributors

Stargazers

Stargazers over time

⚠️ License

Copyright (c) 2019-present Fenny and Contributors. Fiber is free and open-source software licensed under the MIT License. Official logo was created by Vic Shóstak and distributed under Creative Commons license (CC BY-SA 4.0 International).

Third-party library licenses