Ctx
原文: https://docs.gofiber.io/api/ctx
🧠 Ctx
Accepts
Checks, if the specified extensions or content types are acceptable.
检查指定的扩展名或内容类型是否可接受。
INFO
信息
Based on the request’s Accept HTTP header.
基于请求的 Accept HTTP 头。
Signature
签名
1
2
3
4
| func (c *Ctx) Accepts(offers ...string) string
func (c *Ctx) AcceptsCharsets(offers ...string) string
func (c *Ctx) AcceptsEncodings(offers ...string) string
func (c *Ctx) AcceptsLanguages(offers ...string) string
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
| // Accept: text/html, application/json; q=0.8, text/plain; q=0.5; charset="utf-8"
app.Get("/", func(c *fiber.Ctx) error {
c.Accepts("html") // "html"
c.Accepts("text/html") // "text/html"
c.Accepts("json", "text") // "json"
c.Accepts("application/json") // "application/json"
c.Accepts("text/plain", "application/json") // "application/json", due to quality
c.Accepts("image/png") // ""
c.Accepts("png") // ""
// ...
})
|
Example 2
示例 2
1
2
3
4
5
6
7
8
| // Accept: text/html, text/*, application/json, */*; q=0
app.Get("/", func(c *fiber.Ctx) error {
c.Accepts("text/plain", "application/json") // "application/json", due to specificity
c.Accepts("application/json", "text/html") // "text/html", due to first match
c.Accepts("image/png") // "", due to */* without q factor 0 is Not Acceptable
// ...
})
|
Media-Type parameters are supported.
支持媒体类型参数。
Example 3
示例 3
1
2
3
4
5
6
7
8
9
10
11
12
| // Accept: text/plain, application/json; version=1; foo=bar
app.Get("/", func(c *fiber.Ctx) error {
// Extra parameters in the accept are ignored
c.Accepts("text/plain;format=flowed") // "text/plain;format=flowed"
// An offer must contain all parameters present in the Accept type
c.Accepts("application/json") // ""
// Parameter order and capitalization does not matter. Quotes on values are stripped.
c.Accepts(`application/json;foo="bar";VERSION=1`) // "application/json;foo="bar";VERSION=1"
})
|
Example 4
示例 4
1
2
3
4
5
6
7
8
9
10
11
| // Accept: text/plain;format=flowed;q=0.9, text/plain
// i.e., "I prefer text/plain;format=flowed less than other forms of text/plain"
app.Get("/", func(c *fiber.Ctx) error {
// Beware: the order in which offers are listed matters.
// Although the client specified they prefer not to receive format=flowed,
// the text/plain Accept matches with "text/plain;format=flowed" first, so it is returned.
c.Accepts("text/plain;format=flowed", "text/plain") // "text/plain;format=flowed"
// Here, things behave as expected:
c.Accepts("text/plain", "text/plain;format=flowed") // "text/plain"
})
|
Fiber provides similar functions for the other accept headers.
Fiber 为其他接受头提供类似的功能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| // Accept-Charset: utf-8, iso-8859-1;q=0.2
// Accept-Encoding: gzip, compress;q=0.2
// Accept-Language: en;q=0.8, nl, ru
app.Get("/", func(c *fiber.Ctx) error {
c.AcceptsCharsets("utf-16", "iso-8859-1")
// "iso-8859-1"
c.AcceptsEncodings("compress", "br")
// "compress"
c.AcceptsLanguages("pt", "nl", "ru")
// "nl"
// ...
})
|
AllParams
Params is used to get all route parameters. Using Params method to get params.
Params 用于获取所有路由参数。使用 Params 方法获取参数。
Signature
签名
1
| func (c *Ctx) AllParams() map[string]string
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
| // GET http://example.com/user/fenny
app.Get("/user/:name", func(c *fiber.Ctx) error {
c.AllParams() // "{"name": "fenny"}"
// ...
})
// GET http://example.com/user/fenny/123
app.Get("/user/*", func(c *fiber.Ctx) error {
c.AllParams() // "{"*1": "fenny/123"}"
// ...
})
|
App App
Returns the *App reference so you could easily access all application settings.
返回 *App 引用,以便您可以轻松访问所有应用程序设置。
Signature
签名
1
| func (c *Ctx) App() *App
|
Example
示例
1
2
3
| app.Get("/stack", func(c *fiber.Ctx) error {
return c.JSON(c.App().Stack())
})
|
Append 追加
Appends the specified value to the HTTP response header field.
将指定值追加到 HTTP 响应头字段。
CAUTION
注意
If the header is not already set, it creates the header with the specified value.
如果尚未设置头,则使用指定值创建头。
Signature
签名
1
| func (c *Ctx) Append(field string, values ...string)
|
Example
示例
1
2
3
4
5
6
7
8
9
| app.Get("/", func(c *fiber.Ctx) error {
c.Append("Link", "http://google.com", "http://localhost")
// => Link: http://localhost, http://google.com
c.Append("Link", "Test")
// => Link: http://localhost, http://google.com, Test
// ...
})
|
Attachment 附件
Sets the HTTP response Content-Disposition header field to attachment
.
将 HTTP 响应 Content-Disposition 头字段设置为 attachment
。
Signature
签名
1
| func (c *Ctx) Attachment(filename ...string)
|
Example
示例
1
2
3
4
5
6
7
8
9
10
| app.Get("/", func(c *fiber.Ctx) error {
c.Attachment()
// => Content-Disposition: attachment
c.Attachment("./upload/images/logo.png")
// => Content-Disposition: attachment; filename="logo.png"
// => Content-Type: image/png
// ...
})
|
BaseURL 基本网址
Returns the base URL (protocol + host) as a string
.
将基本网址(协议 + 主机)作为 string
返回。
Signature
签名
1
| func (c *Ctx) BaseURL() string
|
Example
示例
1
2
3
4
5
6
| // GET https://example.com/page#chapter-1
app.Get("/", func(c *fiber.Ctx) error {
c.BaseURL() // https://example.com
// ...
})
|
Bind 绑定
Add vars to default view var map binding to template engine. Variables are read by the Render method and may be overwritten.
将变量添加到默认视图变量映射以绑定到模板引擎。变量由 Render 方法读取,并且可能会被覆盖。
Signature
签名
1
| func (c *Ctx) Bind(vars Map) error
|
Example
示例
1
2
3
4
5
6
7
8
9
| app.Use(func(c *fiber.Ctx) error {
c.Bind(fiber.Map{
"Title": "Hello, World!",
})
})
app.Get("/", func(c *fiber.Ctx) error {
return c.Render("xxx.tmpl", fiber.Map{}) // Render will use Title variable
})
|
BodyRaw
Returns the raw request body.
返回原始请求正文。
Signature
签名
1
| func (c *Ctx) BodyRaw() []byte
|
Example
示例
1
2
3
4
5
6
| // curl -X POST http://localhost:8080 -d user=john
app.Post("/", func(c *fiber.Ctx) error {
// Get raw body from POST request:
return c.Send(c.BodyRaw()) // []byte("user=john")
})
|
Returned value is only valid within the handler. Do not store any references.
返回值仅在处理程序内有效。不要存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
了解更多…
Body
As per the header Content-Encoding
, this method will try to perform a file decompression from the body bytes. In case no Content-Encoding
header is sent, it will perform as BodyRaw.
根据标头 Content-Encoding
,此方法将尝试对正文字节执行文件解压缩。如果没有发送 Content-Encoding
标头,它将执行 BodyRaw。
Signature
签名
1
| func (c *Ctx) Body() []byte
|
Example
示例
1
2
3
4
5
6
| // echo 'user=john' | gzip | curl -v -i --data-binary @- -H "Content-Encoding: gzip" http://localhost:8080
app.Post("/", func(c *fiber.Ctx) error {
// Decompress body from POST request based on the Content-Encoding and return the raw content:
return c.Send(c.Body()) // []byte("user=john")
})
|
Returned value is only valid within the handler. Do not store any references.
返回值仅在处理程序内有效。不要存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
阅读更多…
BodyParser
Binds the request body to a struct.
将请求正文绑定到结构。
It is important to specify the correct struct tag based on the content type to be parsed. For example, if you want to parse a JSON body with a field called Pass, you would use a struct field of json:"pass"
.
根据要解析的内容类型指定正确的结构标记非常重要。例如,如果您想使用名为 Pass 的字段解析 JSON 正文,则可以使用 json:"pass"
的结构字段。
content-type 内容类型 | struct tag 结构标记 |
---|
application/x-www-form-urlencoded | form 表单 |
multipart/form-data | form 表单 |
application/json | json |
application/xml | xml |
text/xml | xml |
Signature
签名
1
| func (c *Ctx) BodyParser(out interface{}) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| // Field names should start with an uppercase letter
type Person struct {
Name string `json:"name" xml:"name" form:"name"`
Pass string `json:"pass" xml:"pass" form:"pass"`
}
app.Post("/", func(c *fiber.Ctx) error {
p := new(Person)
if err := c.BodyParser(p); err != nil {
return err
}
log.Println(p.Name) // john
log.Println(p.Pass) // doe
// ...
})
// Run tests with the following curl commands
// curl -X POST -H "Content-Type: application/json" --data "{\"name\":\"john\",\"pass\":\"doe\"}" localhost:3000
// curl -X POST -H "Content-Type: application/xml" --data "<login><name>john</name><pass>doe</pass></login>" localhost:3000
// curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --data "name=john&pass=doe" localhost:3000
// curl -X POST -F name=john -F pass=doe http://localhost:3000
// curl -X POST "http://localhost:3000/?name=john&pass=doe"
|
Returned value is only valid within the handler. Do not store any references.
返回值仅在处理程序中有效。请勿存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
阅读更多…
ClearCookie
Expire a client cookie (or all cookies if left empty)
使客户端 cookie 过期(如果留空,则使所有 cookie 过期)
Signature
签名
1
| func (c *Ctx) ClearCookie(key ...string)
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
| app.Get("/", func(c *fiber.Ctx) error {
// Clears all cookies:
c.ClearCookie()
// Expire specific cookie by name:
c.ClearCookie("user")
// Expire multiple cookies by names:
c.ClearCookie("token", "session", "track_id", "version")
// ...
})
|
CAUTION
注意
Web browsers and other compliant clients will only clear the cookie if the given options are identical to those when creating the cookie, excluding expires and maxAge. ClearCookie will not set these values for you - a technique similar to the one shown below should be used to ensure your cookie is deleted.
只有在给定的选项与创建 cookie 时的选项(不包括 expires 和 maxAge)相同的情况下,Web 浏览器和其他兼容客户端才会清除 cookie。ClearCookie 不会为您设置这些值 - 应使用类似于下面所示的技术来确保您的 cookie 已删除。
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| app.Get("/set", func(c *fiber.Ctx) error {
c.Cookie(&fiber.Cookie{
Name: "token",
Value: "randomvalue",
Expires: time.Now().Add(24 * time.Hour),
HTTPOnly: true,
SameSite: "lax",
})
// ...
})
app.Get("/delete", func(c *fiber.Ctx) error {
c.Cookie(&fiber.Cookie{
Name: "token",
// Set expiry date to the past
Expires: time.Now().Add(-(time.Hour * 2)),
HTTPOnly: true,
SameSite: "lax",
})
// ...
})
|
ClientHelloInfo
ClientHelloInfo contains information from a ClientHello message in order to guide application logic in the GetCertificate and GetConfigForClient callbacks. You can refer to the ClientHelloInfo struct documentation for more information on the returned struct.
ClientHelloInfo 包含 ClientHello 消息中的信息,以便在 GetCertificate 和 GetConfigForClient 回调中指导应用程序逻辑。您可以参考 ClientHelloInfo 结构文档以获取有关返回结构的更多信息。
Signature
签名
1
| func (c *Ctx) ClientHelloInfo() *tls.ClientHelloInfo
|
Example
示例
1
2
3
4
5
| // GET http://example.com/hello
app.Get("/hello", func(c *fiber.Ctx) error {
chi := c.ClientHelloInfo()
// ...
})
|
Context
Returns *fasthttp.RequestCtx that is compatible with the context.Context interface that requires a deadline, a cancellation signal, and other values across API boundaries.
返回与 context.Context 接口兼容的 *fasthttp.RequestCtx,该接口需要一个截止时间、一个取消信号以及跨 API 边界的其他值。
Signature
签名
1
| func (c *Ctx) Context() *fasthttp.RequestCtx
|
INFO
信息
Please read the Fasthttp Documentation for more information.
请阅读 Fasthttp 文档了解更多信息。
Cookie
Set cookie
设置 cookie
Signature
签名
1
| func (c *Ctx) Cookie(cookie *Cookie)
|
1
2
3
4
5
6
7
8
9
10
11
12
| type Cookie struct {
Name string `json:"name"`
Value string `json:"value"`
Path string `json:"path"`
Domain string `json:"domain"`
MaxAge int `json:"max_age"`
Expires time.Time `json:"expires"`
Secure bool `json:"secure"`
HTTPOnly bool `json:"http_only"`
SameSite string `json:"same_site"`
SessionOnly bool `json:"session_only"`
}
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
| app.Get("/", func(c *fiber.Ctx) error {
// Create cookie
cookie := new(fiber.Cookie)
cookie.Name = "john"
cookie.Value = "doe"
cookie.Expires = time.Now().Add(24 * time.Hour)
// Set cookie
c.Cookie(cookie)
// ...
})
|
CookieParser
This method is similar to BodyParser, but for cookie parameters. It is important to use the struct tag “cookie”. For example, if you want to parse a cookie with a field called Age, you would use a struct field of cookie:"age"
.
此方法类似于 BodyParser,但适用于 cookie 参数。重要的是使用结构标记“cookie”。例如,如果您想解析一个名为 Age 的字段的 cookie,您将使用 cookie:"age"
的结构字段。
Signature
签名
1
| func (c *Ctx) CookieParser(out interface{}) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| // Field names should start with an uppercase letter
type Person struct {
Name string `cookie:"name"`
Age int `cookie:"age"`
Job bool `cookie:"job"`
}
app.Get("/", func(c *fiber.Ctx) error {
p := new(Person)
if err := c.CookieParser(p); err != nil {
return err
}
log.Println(p.Name) // Joseph
log.Println(p.Age) // 23
log.Println(p.Job) // true
})
// Run tests with the following curl command
// curl.exe --cookie "name=Joseph; age=23; job=true" http://localhost:8000/
|
Cookies
Get cookie value by key, you could pass an optional default value that will be returned if the cookie key does not exist.
按键获取 cookie 值,您可以传递一个可选的默认值,如果 cookie 键不存在,则将返回该默认值。
Signature
签名
1
| func (c *Ctx) Cookies(key string, defaultValue ...string) string
|
Example
示例
1
2
3
4
5
6
| app.Get("/", func(c *fiber.Ctx) error {
// Get cookie by key:
c.Cookies("name") // "john"
c.Cookies("empty", "doe") // "doe"
// ...
})
|
Returned value is only valid within the handler. Do not store any references.
返回值仅在处理程序中有效。不要存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
阅读更多…
Download 下载
Transfers the file from path as an attachment
.
将文件从路径作为 attachment
传输。
Typically, browsers will prompt the user to download. By default, the Content-Disposition header filename=
parameter is the file path (this typically appears in the browser dialog).
通常,浏览器会提示用户下载。默认情况下,Content-Disposition 头 filename=
参数是文件路径(这通常显示在浏览器对话框中)。
Override this default with the filename parameter.
使用 filename 参数覆盖此默认设置。
Signature
签名
1
| func (c *Ctx) Download(file string, filename ...string) error
|
Example
示例
1
2
3
4
5
6
7
| app.Get("/", func(c *fiber.Ctx) error {
return c.Download("./files/report-12345.pdf");
// => Download report-12345.pdf
return c.Download("./files/report-12345.pdf", "report.pdf");
// => Download report.pdf
})
|
Performs content-negotiation on the Accept HTTP header. It uses Accepts to select a proper format.
对 Accept HTTP 头执行内容协商。它使用 Accepts 选择适当的格式。
INFO
信息
If the header is not specified or there is no proper format, text/plain is used.
如果未指定头或没有适当的格式,则使用 text/plain。
Signature
签名
1
| func (c *Ctx) Format(body interface{}) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| app.Get("/", func(c *fiber.Ctx) error {
// Accept: text/plain
c.Format("Hello, World!")
// => Hello, World!
// Accept: text/html
c.Format("Hello, World!")
// => <p>Hello, World!</p>
// Accept: application/json
c.Format("Hello, World!")
// => "Hello, World!"
// ..
})
|
MultipartForm files can be retrieved by name, the first file from the given key is returned.
可以通过名称检索 MultipartForm 文件,将返回给定键的第一个文件。
Signature
签名
1
| func (c *Ctx) FormFile(key string) (*multipart.FileHeader, error)
|
Example
示例
1
2
3
4
5
6
7
| app.Post("/", func(c *fiber.Ctx) error {
// Get first file from form field "document":
file, err := c.FormFile("document")
// Save file to root directory:
return c.SaveFile(file, fmt.Sprintf("./%s", file.Filename))
})
|
Any form values can be retrieved by name, the first value from the given key is returned.
可以通过名称检索任何表单值,将返回给定键的第一个值。
Signature
签名
1
| func (c *Ctx) FormValue(key string, defaultValue ...string) string
|
Example
示例
1
2
3
4
5
6
7
| app.Post("/", func(c *fiber.Ctx) error {
// Get first value from form field "name":
c.FormValue("name")
// => "john" or "" if not exist
// ..
})
|
Returned value is only valid within the handler. Do not store any references.
返回的值仅在处理程序中有效。不要存储任何引用。
Make copies or use the
改用 Immutable
setting instead.
设置进行复制或使用。 Read more…
阅读更多…
Fresh
When the response is still fresh in the client’s cache true is returned, otherwise false is returned to indicate that the client cache is now stale and the full response should be sent.
当响应在客户端缓存中仍然新鲜时,将返回 true,否则将返回 false 以指示客户端缓存现在已过期,应发送完整响应。
When a client sends the Cache-Control: no-cache request header to indicate an end-to-end reload request, Fresh
will return false to make handling these requests transparent.
当客户端发送 Cache-Control: no-cache 请求头以指示端到端重新加载请求时, Fresh
将返回 false 以使处理这些请求变得透明。
Read more on https://expressjs.com/en/4x/api.html#req.fresh
阅读更多内容,网址为 https://expressjs.com/en/4x/api.html#req.fresh
Signature
签名
1
| func (c *Ctx) Fresh() bool
|
Get
Returns the HTTP request header specified by the field.
返回字段指定的 HTTP 请求头。
TIP
The match is case-insensitive.
匹配不区分大小写。
Signature
签名
1
| func (c *Ctx) Get(key string, defaultValue ...string) string
|
Example
示例
1
2
3
4
5
6
| app.Get("/", func(c *fiber.Ctx) error {
c.Get("Content-Type") // "text/plain"
c.Get("CoNtEnT-TypE") // "text/plain"
c.Get("something", "john") // "john"
// ..
})
|
Returned value is only valid within the handler. Do not store any references.
返回值仅在处理程序内有效。请勿存储任何引用。
Make copies or use the
改用 Immutable
setting instead.
设置进行复制或使用。 Read more…
阅读更多…
Returns the HTTP request headers as a map. Since a header can be set multiple times in a single request, the values of the map are slices of strings containing all the different values of the header.
将 HTTP 请求头作为映射返回。由于可以在单个请求中多次设置头,因此映射的值是包含头的所有不同值的字符串切片。
Signature
签名
1
| func (c *Ctx) GetReqHeaders() map[string][]string
|
Returned value is only valid within the handler. Do not store any references.
返回值仅在处理程序内有效。请勿存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
阅读更多…
Returns the HTTP response header specified by the field.
返回字段指定的 HTTP 响应头。
TIP
The match is case-insensitive.
匹配不区分大小写。
Signature
签名
1
| func (c *Ctx) GetRespHeader(key string, defaultValue ...string) string
|
Example
示例
1
2
3
4
5
6
| app.Get("/", func(c *fiber.Ctx) error {
c.GetRespHeader("X-Request-Id") // "8d7ad5e3-aaf3-450b-a241-2beb887efd54"
c.GetRespHeader("Content-Type") // "text/plain"
c.GetRespHeader("something", "john") // "john"
// ..
})
|
Returned value is only valid within the handler. Do not store any references.
返回的值仅在处理程序中有效。不要存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
阅读更多…
Returns the HTTP response headers as a map. Since a header can be set multiple times in a single request, the values of the map are slices of strings containing all the different values of the header.
以映射的形式返回 HTTP 响应头。由于在单个请求中可以多次设置头,因此映射的值是包含头的所有不同值的字符串切片。
Signature
签名
1
| func (c *Ctx) GetRespHeaders() map[string][]string
|
Returned value is only valid within the handler. Do not store any references.
返回的值仅在处理程序中有效。不要存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
阅读更多…
GetRouteURL
Generates URLs to named routes, with parameters. URLs are relative, for example: “/user/1831”
生成带参数的命名路由的 URL。URL 是相对的,例如:“/user/1831”
Signature
签名
1
| func (c *Ctx) GetRouteURL(routeName string, params Map) (string, error)
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Home page")
}).Name("home")
app.Get("/user/:id", func(c *fiber.Ctx) error {
return c.SendString(c.Params("id"))
}).Name("user.show")
app.Get("/test", func(c *fiber.Ctx) error {
location, _ := c.GetRouteURL("user.show", fiber.Map{"id": 1})
return c.SendString(location)
})
// /test returns "/user/1"
|
Hostname 主机名
Returns the hostname derived from the Host HTTP header.
返回从 Host HTTP 标头派生的主机名。
Signature
签名
1
| func (c *Ctx) Hostname() string
|
Example
示例
1
2
3
4
5
6
7
| // GET http://google.com/search
app.Get("/", func(c *fiber.Ctx) error {
c.Hostname() // "google.com"
// ...
})
|
Returned value is only valid within the handler. Do not store any references.
返回值仅在处理程序中有效。不要存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
阅读更多…
IP IP
Returns the remote IP address of the request.
返回请求的远程 IP 地址。
Signature
签名
1
| func (c *Ctx) IP() string
|
Example
示例
1
2
3
4
5
| app.Get("/", func(c *fiber.Ctx) error {
c.IP() // "127.0.0.1"
// ...
})
|
When registering the proxy request header in the fiber app, the ip address of the header is returned (Fiber configuration)
在 Fiber 应用中注册代理请求头时,将返回头部的 IP 地址(Fiber 配置)
1
2
3
| app := fiber.New(fiber.Config{
ProxyHeader: fiber.HeaderXForwardedFor,
})
|
IPs IP
Returns an array of IP addresses specified in the X-Forwarded-For request header.
返回 X-Forwarded-For 请求头中指定的一系列 IP 地址。
Signature
签名
1
| func (c *Ctx) IPs() []string
|
Example
示例
1
2
3
4
5
6
7
| // X-Forwarded-For: proxy1, 127.0.0.1, proxy3
app.Get("/", func(c *fiber.Ctx) error {
c.IPs() // ["proxy1", "127.0.0.1", "proxy3"]
// ...
})
|
CAUTION
注意
Improper use of the X-Forwarded-For header can be a security risk. For details, see the Security and privacy concerns section.
不当使用 X-Forwarded-For 头部可能存在安全风险。有关详细信息,请参阅安全和隐私问题部分。
Is IsMime
Returns the matching content type, if the incoming request’s Content-Type HTTP header field matches the MIME type specified by the type parameter.
如果传入请求的 Content-Type 头字段与 type 参数指定的内容类型匹配,则返回该内容类型。
INFO
信息
If the request has no body, it returns false.
如果请求没有内容,则返回 False。
Signature
签名
1
| func (c *Ctx) Is(extension string) bool
|
Example
示例
1
2
3
4
5
6
7
8
9
| // Content-Type: text/html; charset=utf-8
app.Get("/", func(c *fiber.Ctx) error {
c.Is("html") // true
c.Is(".html") // true
c.Is("json") // false
// ...
})
|
IsFromLocal IsFromLocal
Returns true if request came from localhost
如果请求来自
Signature
签名
1
| func (c *Ctx) IsFromLocal() bool {
|
Example
示例
1
2
3
4
5
6
| app.Get("/", func(c *fiber.Ctx) error {
// If request came from localhost, return true else return false
c.IsFromLocal()
// ...
})
|
JSON JSON
Converts any interface or string to JSON using the encoding/json package.
使用 /json 包将任何接口或字符串转换为 JSON。
INFO
信息
JSON also sets the content header to the ctype
parameter. If no ctype
is passed in, the header is set to application/json
.
JSON 还会将内容头设置为 ctype
参数。如果没有传入 ctype
,则将头设置为 application/json
。
Signature
签名
1
| func (c *Ctx) JSON(data interface{}, ctype ...string) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| type SomeStruct struct {
Name string
Age uint8
}
app.Get("/json", func(c *fiber.Ctx) error {
// Create data struct:
data := SomeStruct{
Name: "Grame",
Age: 20,
}
return c.JSON(data)
// => Content-Type: application/json
// => "{"Name": "Grame", "Age": 20}"
return c.JSON(fiber.Map{
"name": "Grame",
"age": 20,
})
// => Content-Type: application/json
// => "{"name": "Grame", "age": 20}"
return c.JSON(fiber.Map{
"type": "https://example.com/probs/out-of-credit",
"title": "You do not have enough credit.",
"status": 403,
"detail": "Your current balance is 30, but that costs 50.",
"instance": "/account/12345/msgs/abc",
}, "application/problem+json")
// => Content-Type: application/problem+json
// => "{
// => "type": "https://example.com/probs/out-of-credit",
// => "title": "You do not have enough credit.",
// => "status": 403,
// => "detail": "Your current balance is 30, but that costs 50.",
// => "instance": "/account/12345/msgs/abc",
// => }"
})
|
JSONP JSONP
Sends a JSON response with JSONP support. This method is identical to JSON, except that it opts-in to JSONP callback support. By default, the callback name is simply callback.
发送带有 JSONP支持的 JSON 响应。此方法与 JSON 相同,但它启用了 JSONP
Override this by passing a named string in the method.
通过在方法中传递一个命名字符串来覆盖此项。
Signature
签名
1
| func (c *Ctx) JSONP(data interface{}, callback ...string) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| type SomeStruct struct {
name string
age uint8
}
app.Get("/", func(c *fiber.Ctx) error {
// Create data struct:
data := SomeStruct{
name: "Grame",
age: 20,
}
return c.JSONP(data)
// => callback({"name": "Grame", "age": 20})
return c.JSONP(data, "customFunc")
// => customFunc({"name": "Grame", "age": 20})
})
|
Links 链接
Joins the links followed by the property to populate the response’s Link HTTP header field.
连接属性后面的链接以填充响应的 Link HTTP 标头字段。
Signature
签名
1
| func (c *Ctx) Links(link ...string)
|
Example
示例
1
2
3
4
5
6
7
8
9
10
| app.Get("/", func(c *fiber.Ctx) error {
c.Links(
"http://api.example.com/users?page=2", "next",
"http://api.example.com/users?page=5", "last",
)
// Link: <http://api.example.com/users?page=2>; rel="next",
// <http://api.example.com/users?page=5>; rel="last"
// ...
})
|
Locals 本地
A method that stores variables scoped to the request and, therefore, are available only to the routes that match the request.
一种存储变量的方法,这些变量的作用域限定为请求,因此仅对与请求匹配的路由可用。
TIP
This is useful if you want to pass some specific data to the next middleware.
如果您想将一些特定数据传递给下一个中间件,这将非常有用。
Signature
签名
1
| func (c *Ctx) Locals(key interface{}, value ...interface{}) interface{}
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
| app.Use(func(c *fiber.Ctx) error {
c.Locals("user", "admin")
return c.Next()
})
app.Get("/admin", func(c *fiber.Ctx) error {
if c.Locals("user") == "admin" {
return c.Status(fiber.StatusOK).SendString("Welcome, admin!")
}
return c.SendStatus(fiber.StatusForbidden)
})
|
Location 位置
Sets the response Location HTTP header to the specified path parameter.
将响应 Location HTTP 标头设置为指定的路径参数。
Signature
签名
1
| func (c *Ctx) Location(path string)
|
Example
示例
1
2
3
4
5
6
7
| app.Post("/", func(c *fiber.Ctx) error {
c.Location("http://example.com")
c.Location("/foo/bar")
return nil
})
|
Method 方法
Returns a string corresponding to the HTTP method of the request: GET
, POST
, PUT
, and so on.
返回一个字符串,该字符串对应于请求的 HTTP 方法: GET
、 POST
、 PUT
等。
Optionally, you could override the method by passing a string.
您可以选择通过传递字符串来覆盖该方法。
Signature
签名
1
| func (c *Ctx) Method(override ...string) string
|
Example
示例
1
2
3
4
5
6
7
8
| app.Post("/", func(c *fiber.Ctx) error {
c.Method() // "POST"
c.Method("GET")
c.Method() // GET
// ...
})
|
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.
要访问多部分表单条目,您可以使用 MultipartForm()
解析二进制文件。这会返回一个 map[string][]string
,因此给定一个键,值将是一个字符串切片。
Signature
签名
1
| func (c *Ctx) MultipartForm() (*multipart.Form, error)
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| app.Post("/", func(c *fiber.Ctx) error {
// Parse the multipart form:
if form, err := c.MultipartForm(); err == nil {
// => *multipart.Form
if token := form.Value["token"]; len(token) > 0 {
// Get key value:
fmt.Println(token[0])
}
// Get all files from "documents" key:
files := form.File["documents"]
// => []*multipart.FileHeader
// Loop through files:
for _, file := range files {
fmt.Println(file.Filename, file.Size, file.Header["Content-Type"][0])
// => "tutorial.pdf" 360641 "application/pdf"
// Save the files to disk:
if err := c.SaveFile(file, fmt.Sprintf("./%s", file.Filename)); err != nil {
return err
}
}
}
return err
})
|
Next
When Next is called, it executes the next method in the stack that matches the current route. You can pass an error struct within the method that will end the chaining and call the error handler.
调用 Next 时,它会执行与当前路由匹配的堆栈中的下一个方法。您可以在方法中传递一个错误结构,该结构将结束链接并调用错误处理程序。
Signature
签名
1
| func (c *Ctx) Next() error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| app.Get("/", func(c *fiber.Ctx) error {
fmt.Println("1st route!")
return c.Next()
})
app.Get("*", func(c *fiber.Ctx) error {
fmt.Println("2nd route!")
return c.Next()
})
app.Get("/", func(c *fiber.Ctx) error {
fmt.Println("3rd route!")
return c.SendString("Hello, World!")
})
|
OriginalURL
Returns the original request URL.
返回原始请求 URL。
Signature
签名
1
| func (c *Ctx) OriginalURL() string
|
Example
示例
1
2
3
4
5
6
7
| // GET http://example.com/search?q=something
app.Get("/", func(c *fiber.Ctx) error {
c.OriginalURL() // "/search?q=something"
// ...
})
|
Returned value is only valid within the handler. Do not store any references.
返回值仅在处理程序中有效。不要存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
阅读更多…
Params 参数
Method can be used to get the route parameters, you could pass an optional default value that will be returned if the param key does not exist.
方法可用于获取路由参数,您可以传递一个可选的默认值,如果参数键不存在,则将返回该默认值。
INFO
信息
Defaults to empty string (""
), if the param doesn’t exist.
如果参数不存在,则默认为空字符串 ( ""
)。
Signature
签名
1
| func (c *Ctx) Params(key string, defaultValue ...string) string
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| // GET http://example.com/user/fenny
app.Get("/user/:name", func(c *fiber.Ctx) error {
c.Params("name") // "fenny"
// ...
})
// GET http://example.com/user/fenny/123
app.Get("/user/*", func(c *fiber.Ctx) error {
c.Params("*") // "fenny/123"
c.Params("*1") // "fenny/123"
// ...
})
|
Unnamed route parameters(*, +) can be fetched by the character and the counter in the route.
可以通过路由中的字符和计数器获取未命名的路由参数(*, +)。
Example
示例
1
2
3
4
| // ROUTE: /v1/*/shop/*
// GET: /v1/brand/4/shop/blue/xs
c.Params("*1") // "brand/4"
c.Params("*2") // "blue/xs"
|
For reasons of downward compatibility, the first parameter segment for the parameter character can also be accessed without the counter.
出于向下兼容性的原因,也可以在没有计数器的情况下访问参数字符的第一个参数段。
Example
示例
1
2
3
| app.Get("/v1/*/shop/*", func(c *fiber.Ctx) error {
c.Params("*") // outputs the values of the first wildcard segment
})
|
Returned value is only valid within the handler. Do not store any references.
返回值仅在处理程序中有效。不要存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置代替。 Read more…
阅读更多…
ParamsInt
Method can be used to get an integer from the route parameters. Please note if that parameter is not in the request, zero will be returned. If the parameter is NOT a number, zero and an error will be returned
方法可用于从路由参数中获取整数。请注意,如果请求中没有该参数,则会返回零。如果参数不是数字,则会返回零和错误
INFO
信息
Defaults to the integer zero (0
), if the param doesn’t exist.
如果参数不存在,则默认为整数零 ( 0
)。
Signature
签名
1
| func (c *Ctx) ParamsInt(key string) (int, error)
|
Example
示例
1
2
3
4
5
6
| // GET http://example.com/user/123
app.Get("/user/:id", func(c *fiber.Ctx) error {
id, err := c.ParamsInt("id") // int 123 and no error
// ...
})
|
This method is equivalent of using atoi
with ctx.Params
此方法相当于在 ctx.Params 中使用 atoi
ParamsParser
This method is similar to BodyParser, but for path parameters. It is important to use the struct tag “params”. For example, if you want to parse a path parameter with a field called Pass, you would use a struct field of params:“pass”
此方法类似于 BodyParser,但适用于路径参数。重要的是使用结构标记“params”。例如,如果您想使用名为 Pass 的字段解析路径参数,则可以使用 params:“pass” 的结构字段
Signature
签名
1
| func (c *Ctx) ParamsParser(out interface{}) error
|
Example
示例
1
2
3
4
5
6
7
8
| // GET http://example.com/user/111
app.Get("/user/:id", func(c *fiber.Ctx) error {
param := struct {ID uint `params:"id"`}{}
c.ParamsParser(¶m) // "{"id": 111}"
// ...
})
|
Path
Contains the path part of the request URL. Optionally, you could override the path by passing a string. For internal redirects, you might want to call RestartRouting instead of Next.
包含请求 URL 的路径部分。或者,您可以通过传递字符串来覆盖路径。对于内部重定向,您可能希望调用 RestartRouting 而不是 Next。
Signature
签名
1
| func (c *Ctx) Path(override ...string) string
|
Example
示例
1
2
3
4
5
6
7
8
9
10
| // GET http://example.com/users?sort=desc
app.Get("/users", func(c *fiber.Ctx) error {
c.Path() // "/users"
c.Path("/john")
c.Path() // "/john"
// ...
})
|
Protocol
Contains the request protocol string: http
or https
for TLS requests.
包含请求协议字符串:对于 TLS 请求,为 http
或 https
。
Signature
签名
1
| func (c *Ctx) Protocol() string
|
Example
示例
1
2
3
4
5
6
7
| // GET http://example.com
app.Get("/", func(c *fiber.Ctx) error {
c.Protocol() // "http"
// ...
})
|
Queries 查询
Queries is a function that returns an object containing a property for each query string parameter in the route.
查询是一个函数,它返回一个对象,其中包含一个属性,用于路由中的每个查询字符串参数。
Signature
签名
1
| func (c *Ctx) Queries() map[string]string
|
Example
示例
1
2
3
4
5
6
7
8
9
| // GET http://example.com/?name=alex&want_pizza=false&id=
app.Get("/", func(c *fiber.Ctx) error {
m := c.Queries()
m["name"] // "alex"
m["want_pizza"] // "false"
m["id"] // ""
// ...
})
|
Example
示例
1
2
3
4
5
6
7
| // GET http://example.com/?field1=value1&field1=value2&field2=value3
app.Get("/", func (c *fiber.Ctx) error {
m := c.Queries()
m["field1"] // "value2"
m["field2"] // value3
})
|
Example
示例
1
2
3
4
5
6
7
8
| // GET http://example.com/?list_a=1&list_a=2&list_a=3&list_b[]=1&list_b[]=2&list_b[]=3&list_c=1,2,3
app.Get("/", func(c *fiber.Ctx) error {
m := c.Queries()
m["list_a"] // "3"
m["list_b[]"] // "3"
m["list_c"] // "1,2,3"
})
|
Example
示例
1
2
3
4
5
6
7
| // GET /api/posts?filters.author.name=John&filters.category.name=Technology
app.Get("/", func(c *fiber.Ctx) error {
m := c.Queries()
m["filters.author.name"] // John
m["filters.category.name"] // Technology
})
|
Example
示例
1
2
3
4
5
6
7
8
9
10
| // GET /api/posts?tags=apple,orange,banana&filters[tags]=apple,orange,banana&filters[category][name]=fruits&filters.tags=apple,orange,banana&filters.category.name=fruits
app.Get("/", func(c *fiber.Ctx) error {
m := c.Queries()
m["tags"] // apple,orange,banana
m["filters[tags]"] // apple,orange,banana
m["filters[category][name]"] // fruits
m["filters.tags"] // apple,orange,banana
m["filters.category.name"] // fruits
})
|
Query 查询
This property is an object containing a property for each query string parameter in the route, you could pass an optional default value that will be returned if the query key does not exist.
此属性是一个对象,其中包含一个属性,用于路由中的每个查询字符串参数,您可以传递一个可选的默认值,如果查询键不存在,则将返回该值。
INFO
信息
If there is no query string, it returns an empty string.
如果没有查询字符串,则返回一个空字符串。
Signature
签名
1
| func (c *Ctx) Query(key string, defaultValue ...string) string
|
Example
示例
1
2
3
4
5
6
7
8
9
| // GET http://example.com/?order=desc&brand=nike
app.Get("/", func(c *fiber.Ctx) error {
c.Query("order") // "desc"
c.Query("brand") // "nike"
c.Query("empty", "nike") // "nike"
// ...
})
|
Returned value is only valid within the handler. Do not store any references.
返回的值仅在处理程序中有效。不要存储任何引用。
Make copies or use the
制作副本或使用 Immutable
setting instead.
设置。 Read more…
阅读更多…
QueryBool
This property is an object containing a property for each query boolean parameter in the route, you could pass an optional default value that will be returned if the query key does not exist.
此属性是一个对象,其中包含路由中每个查询布尔参数的属性,您可以传递一个可选的默认值,如果查询键不存在,则将返回该值。
CAUTION
注意
Please note if that parameter is not in the request, false will be returned. If the parameter is not a boolean, it is still tried to be converted and usually returned as false.
请注意,如果请求中没有该参数,则将返回 false。如果该参数不是布尔值,仍会尝试进行转换,通常返回 false。
Signature
签名
1
| func (c *Ctx) QueryBool(key string, defaultValue ...bool) bool
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
| // GET http://example.com/?name=alex&want_pizza=false&id=
app.Get("/", func(c *fiber.Ctx) error {
c.QueryBool("want_pizza") // false
c.QueryBool("want_pizza", true) // false
c.QueryBool("name") // false
c.QueryBool("name", true) // true
c.QueryBool("id") // false
c.QueryBool("id", true) // true
// ...
})
|
QueryFloat
This property is an object containing a property for each query float64 parameter in the route, you could pass an optional default value that will be returned if the query key does not exist.
此属性是一个对象,其中包含路由中每个查询 float64 参数的属性,您可以传递一个可选的默认值,如果查询键不存在,则将返回该值。
CAUTION
注意
Please note if that parameter is not in the request, zero will be returned. If the parameter is not a number, it is still tried to be converted and usually returned as 1.
请注意,如果请求中没有该参数,则将返回零。如果该参数不是数字,仍会尝试进行转换,通常返回 1。
INFO
信息
Defaults to the float64 zero (0
), if the param doesn’t exist.
如果参数不存在,则默认为 float64 零 ( 0
)。
Signature
签名
1
| func (c *Ctx) QueryFloat(key string, defaultValue ...float64) float64
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
| // GET http://example.com/?name=alex&amount=32.23&id=
app.Get("/", func(c *fiber.Ctx) error {
c.QueryFloat("amount") // 32.23
c.QueryFloat("amount", 3) // 32.23
c.QueryFloat("name", 1) // 1
c.QueryFloat("name") // 0
c.QueryFloat("id", 3) // 3
// ...
})
|
QueryInt
This property is an object containing a property for each query integer parameter in the route, you could pass an optional default value that will be returned if the query key does not exist.
此属性是一个对象,其中包含路由中每个查询整数参数的属性,您可以传递一个可选的默认值,如果查询键不存在,则将返回该值。
CAUTION
注意
Please note if that parameter is not in the request, zero will be returned. If the parameter is not a number, it is still tried to be converted and usually returned as 1.
请注意,如果请求中没有该参数,则将返回零。如果该参数不是数字,仍会尝试进行转换,通常返回 1。
INFO
信息
Defaults to the integer zero (0
), if the param doesn’t exist.
如果参数不存在,则默认为整数零 ( 0
)。
Signature
签名
1
| func (c *Ctx) QueryInt(key string, defaultValue ...int) int
|
Example
示例
1
2
3
4
5
6
7
8
9
10
| // GET http://example.com/?name=alex&wanna_cake=2&id=
app.Get("/", func(c *fiber.Ctx) error {
c.QueryInt("wanna_cake", 1) // 2
c.QueryInt("name", 1) // 1
c.QueryInt("id", 1) // 1
c.QueryInt("id") // 0
// ...
})
|
QueryParser
This method is similar to BodyParser, but for query parameters. It is important to use the struct tag “query”. For example, if you want to parse a query parameter with a field called Pass, you would use a struct field of query:"pass"
.
此方法类似于 BodyParser,但适用于查询参数。重要的是使用结构标记“query”。例如,如果您想使用名为 Pass 的字段解析查询参数,则可以使用 query:"pass"
的结构字段。
Signature
签名
1
| func (c *Ctx) QueryParser(out interface{}) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // Field names should start with an uppercase letter
type Person struct {
Name string `query:"name"`
Pass string `query:"pass"`
Products []string `query:"products"`
}
app.Get("/", func(c *fiber.Ctx) error {
p := new(Person)
if err := c.QueryParser(p); err != nil {
return err
}
log.Println(p.Name) // john
log.Println(p.Pass) // doe
log.Println(p.Products) // [shoe, hat]
// ...
})
// Run tests with the following curl command
// curl "http://localhost:3000/?name=john&pass=doe&products=shoe,hat"
|
Range
A struct containing the type and a slice of ranges will be returned.
将返回包含类型和范围切片的结构。
Signature
签名
1
| func (c *Ctx) Range(size int) (Range, error)
|
Example
示例
1
2
3
4
5
6
7
8
9
10
| // Range: bytes=500-700, 700-900
app.Get("/", func(c *fiber.Ctx) error {
b := c.Range(1000)
if b.Type == "bytes" {
for r := range r.Ranges {
fmt.Println(r)
// [500, 700]
}
}
})
|
Redirect
Redirects to the URL derived from the specified path, with specified status, a positive integer that corresponds to an HTTP status code.
重定向到从指定路径派生的 URL,具有指定的正整数状态,该正整数对应于 HTTP 状态代码。
INFO
信息
If not specified, status defaults to 302 Found.
如果未指定,则状态默认为 302 Found。
Signature
签名
1
| func (c *Ctx) Redirect(location string, status ...int) error
|
Example
示例
1
2
3
4
5
6
7
| app.Get("/coffee", func(c *fiber.Ctx) error {
return c.Redirect("/teapot")
})
app.Get("/teapot", func(c *fiber.Ctx) error {
return c.Status(fiber.StatusTeapot).Send("🍵 short and stout 🍵")
})
|
More examples
更多示例
1
2
3
4
5
6
| app.Get("/", func(c *fiber.Ctx) error {
return c.Redirect("/foo/bar")
return c.Redirect("../login")
return c.Redirect("http://example.com")
return c.Redirect("http://example.com", 301)
})
|
RedirectToRoute
Redirects to the specific route along with the parameters and with specified status, a positive integer that corresponds to an HTTP status code.
重定向到特定路由以及参数,并具有指定状态,一个对应于 HTTP 状态代码的正整数。
INFO
信息
If not specified, status defaults to 302 Found.
如果未指定,则状态默认为 302 Found。
INFO
信息
If you want to send queries to route, you must add “queries” key typed as map[string]string to params.
如果要将查询发送到路由,则必须将键入为 map[string]string 的“queries”键添加到 params。
Signature
签名
1
| func (c *Ctx) RedirectToRoute(routeName string, params fiber.Map, status ...int) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| app.Get("/", func(c *fiber.Ctx) error {
// /user/fiber
return c.RedirectToRoute("user", fiber.Map{
"name": "fiber"
})
})
app.Get("/with-queries", func(c *fiber.Ctx) error {
// /user/fiber?data[0][name]=john&data[0][age]=10&test=doe
return c.RedirectToRoute("user", fiber.Map{
"name": "fiber",
"queries": map[string]string{"data[0][name]": "john", "data[0][age]": "10", "test": "doe"},
})
})
app.Get("/user/:name", func(c *fiber.Ctx) error {
return c.SendString(c.Params("name"))
}).Name("user")
|
RedirectBack
Redirects back to refer URL. It redirects to fallback URL if refer header doesn’t exists, with specified status, a positive integer that corresponds to an HTTP status code.
重定向回引用 URL。如果引用头不存在,则重定向到后备 URL,并具有指定状态,一个对应于 HTTP 状态代码的正整数。
INFO
信息
If not specified, status defaults to 302 Found.
如果未指定,则状态默认为 302 Found。
Signature
签名
1
| func (c *Ctx) RedirectBack(fallback string, status ...int) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
| app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Home page")
})
app.Get("/test", func(c *fiber.Ctx) error {
c.Set("Content-Type", "text/html")
return c.SendString(`<a href="/back">Back</a>`)
})
app.Get("/back", func(c *fiber.Ctx) error {
return c.RedirectBack("/")
})
|
Render
Renders a view with data and sends a text/html
response. By default Render
uses the default Go Template engine. If you want to use another View engine, please take a look at our Template middleware.
使用数据呈现视图并发送 text/html
响应。默认情况下, Render
使用默认的 Go Template 引擎。如果您想使用其他视图引擎,请查看我们的模板中间件。
Signature
签名
1
| func (c *Ctx) Render(name string, bind interface{}, layouts ...string) error
|
Request
Request return the *fasthttp.Request pointer
Request 返回 *fasthttp.Request 指针
Signature
签名
1
| func (c *Ctx) Request() *fasthttp.Request
|
Example
示例
1
2
3
4
| app.Get("/", func(c *fiber.Ctx) error {
c.Request().Header.Method()
// => []byte("GET")
})
|
This method is similar to BodyParser, but for request headers. It is important to use the struct tag “reqHeader”. For example, if you want to parse a request header with a field called Pass, you would use a struct field of reqHeader:"pass"
.
此方法类似于 BodyParser,但适用于请求头。重要的是使用结构标记“reqHeader”。例如,如果您想解析一个带有名为 Pass 的字段的请求头,您将使用 reqHeader:"pass"
的结构字段。
Signature
签名
1
| func (c *Ctx) ReqHeaderParser(out interface{}) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // Field names should start with an uppercase letter
type Person struct {
Name string `reqHeader:"name"`
Pass string `reqHeader:"pass"`
Products []string `reqHeader:"products"`
}
app.Get("/", func(c *fiber.Ctx) error {
p := new(Person)
if err := c.ReqHeaderParser(p); err != nil {
return err
}
log.Println(p.Name) // john
log.Println(p.Pass) // doe
log.Println(p.Products) // [shoe, hat]
// ...
})
// Run tests with the following curl command
// curl "http://localhost:3000/" -H "name: john" -H "pass: doe" -H "products: shoe,hat"
|
Response
Response return the *fasthttp.Response pointer
Response 返回 *fasthttp.Response 指针
Signature
签名
1
| func (c *Ctx) Response() *fasthttp.Response
|
Example
示例
1
2
3
4
5
| app.Get("/", func(c *fiber.Ctx) error {
c.Response().BodyWriter().Write([]byte("Hello, World!"))
// => "Hello, World!"
return nil
})
|
RestartRouting
Instead of executing the next method when calling Next, RestartRouting restarts execution from the first method that matches the current route. This may be helpful after overriding the path, i. e. an internal redirect. Note that handlers might be executed again which could result in an infinite loop.
在调用 Next 时,RestartRouting 从匹配当前路由的第一个方法重新开始执行,而不是执行下一个方法。这在覆盖路径后可能会有所帮助,即内部重定向。请注意,处理程序可能会再次执行,这可能会导致无限循环。
Signature
签名
1
| func (c *Ctx) RestartRouting() error
|
Example
示例
1
2
3
4
5
6
7
8
| app.Get("/new", func(c *fiber.Ctx) error {
return c.SendString("From /new")
})
app.Get("/old", func(c *fiber.Ctx) error {
c.Path("/new")
return c.RestartRouting()
})
|
Route 路由
Returns the matched Route struct.
返回匹配的 Route 结构。
Signature
签名
1
| func (c *Ctx) Route() *Route
|
Example
示例
1
2
3
4
5
6
7
8
9
10
| // http://localhost:8080/hello
app.Get("/hello/:name", func(c *fiber.Ctx) error {
r := c.Route()
fmt.Println(r.Method, r.Path, r.Params, r.Handlers)
// GET /hello/:name handler [name]
// ...
})
|
CAUTION
注意
Do not rely on c.Route()
in middlewares before calling c.Next()
- c.Route()
returns the last executed route.
在调用 c.Next()
之前,不要依赖中间件中的 c.Route()
- c.Route()
返回最后执行的路由。
Example
示例
1
2
3
4
5
6
7
8
| func MyMiddleware() fiber.Handler {
return func(c *fiber.Ctx) error {
beforeNext := c.Route().Path // Will be '/'
err := c.Next()
afterNext := c.Route().Path // Will be '/hello/:name'
return err
}
}
|
SaveFile
Method is used to save any multipart file to disk.
方法用于将任何多部分文件保存到磁盘。
Signature
签名
1
| func (c *Ctx) SaveFile(fh *multipart.FileHeader, path string) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| app.Post("/", func(c *fiber.Ctx) error {
// Parse the multipart form:
if form, err := c.MultipartForm(); err == nil {
// => *multipart.Form
// Get all files from "documents" key:
files := form.File["documents"]
// => []*multipart.FileHeader
// Loop through files:
for _, file := range files {
fmt.Println(file.Filename, file.Size, file.Header["Content-Type"][0])
// => "tutorial.pdf" 360641 "application/pdf"
// Save the files to disk:
if err := c.SaveFile(file, fmt.Sprintf("./%s", file.Filename)); err != nil {
return err
}
}
return err
}
})
|
SaveFileToStorage
Method is used to save any multipart file to an external storage system.
方法用于将任何多部分文件保存到外部存储系统。
Signature
签名
1
| func (c *Ctx) SaveFileToStorage(fileheader *multipart.FileHeader, path string, storage Storage) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| storage := memory.New()
app.Post("/", func(c *fiber.Ctx) error {
// Parse the multipart form:
if form, err := c.MultipartForm(); err == nil {
// => *multipart.Form
// Get all files from "documents" key:
files := form.File["documents"]
// => []*multipart.FileHeader
// Loop through files:
for _, file := range files {
fmt.Println(file.Filename, file.Size, file.Header["Content-Type"][0])
// => "tutorial.pdf" 360641 "application/pdf"
// Save the files to storage:
if err := c.SaveFileToStorage(file, fmt.Sprintf("./%s", file.Filename), storage); err != nil {
return err
}
}
return err
}
})
|
Secure
A boolean property that is true
, if a TLS connection is established.
一个布尔属性,如果建立了 TLS 连接,则为 true
。
Signature
签名
1
| func (c *Ctx) Secure() bool
|
Example
示例
1
2
| // Secure() method is equivalent to:
c.Protocol() == "https"
|
Send
Sets the HTTP response body.
设置 HTTP 响应主体。
Signature
签名
1
| func (c *Ctx) Send(body []byte) error
|
Example
示例
1
2
3
| app.Get("/", func(c *fiber.Ctx) error {
return c.Send([]byte("Hello, World!")) // => "Hello, World!"
})
|
Fiber also provides SendString
and SendStream
methods for raw inputs.
Fiber 还为原始输入提供 SendString
和 SendStream
方法。
TIP
Use this if you don’t need type assertion, recommended for faster performance.
如果您不需要类型断言,请使用此方法,建议使用此方法以获得更快的性能。
Signature
签名
1
2
| func (c *Ctx) SendString(body string) error
func (c *Ctx) SendStream(stream io.Reader, size ...int) error
|
Example
示例
1
2
3
4
5
6
7
| app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Hello, World!")
// => "Hello, World!"
return c.SendStream(bytes.NewReader([]byte("Hello, World!")))
// => "Hello, World!"
})
|
SendFile
Transfers the file from the given path. Sets the Content-Type response HTTP header field based on the filenames extension.
从给定路径传输文件。根据文件名扩展名设置 Content-Type 响应 HTTP 头字段。
CAUTION
注意
Method doesn´t use gzipping by default, set it to true to enable.
方法默认不使用 gzip,将其设置为 true 以启用。
Signature
签名
1
| func (c *Ctx) SendFile(file string, compress ...bool) error
|
Example
示例
1
2
3
4
5
6
| app.Get("/not-found", func(c *fiber.Ctx) error {
return c.SendFile("./public/404.html");
// Disable compression
return c.SendFile("./static/index.html", false);
})
|
INFO
信息
If the file contains an url specific character you have to escape it before passing the file path into the sendFile
function.
如果文件包含特定于 url 的字符,则必须在将文件路径传递给 sendFile
函数之前对其进行转义。
Example
示例
1
2
3
| app.Get("/file-with-url-chars", func(c *fiber.Ctx) error {
return c.SendFile(url.PathEscape("hash_sign_#.txt"))
})
|
INFO
信息
For sending files from embedded file system this functionality can be used
可用于从嵌入式文件系统发送文件
SendStatus
Sets the status code and the correct status message in the body, if the response body is empty.
如果响应体为空,则在正文中设置状态代码和正确状态消息。
TIP
You can find all used status codes and messages here.
您可以在此处找到所有已使用状态代码和消息。
Signature
签名
1
| func (c *Ctx) SendStatus(status int) error
|
Example
示例
1
2
3
4
5
6
7
8
| app.Get("/not-found", func(c *fiber.Ctx) error {
return c.SendStatus(415)
// => 415 "Unsupported Media Type"
c.SendString("Hello, World!")
return c.SendStatus(415)
// => 415 "Hello, World!"
})
|
Set
Sets the response’s HTTP header field to the specified key
, value
.
将响应的 HTTP 标头字段设置为指定的 key
、 value
。
Signature
签名
1
| func (c *Ctx) Set(key string, val string)
|
Example
示例
1
2
3
4
5
6
| app.Get("/", func(c *fiber.Ctx) error {
c.Set("Content-Type", "text/plain")
// => "Content-type: text/plain"
// ...
})
|
SetParserDecoder
Allow you to config BodyParser/QueryParser decoder, base on schema’s options, providing possibility to add custom type for parsing.
允许您配置 BodyParser/QueryParser 解码器,基于架构的选项,提供添加自定义类型以进行解析的可能性。
Signature
签名
1
2
3
4
5
6
7
8
9
| func SetParserDecoder(parserConfig fiber.ParserConfig{
IgnoreUnknownKeys bool,
ParserType []fiber.ParserType{
Customtype interface{},
Converter func(string) reflect.Value,
},
ZeroEmpty bool,
SetAliasTag string,
})
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| type CustomTime time.Time
// String() returns the time in string
func (ct *CustomTime) String() string {
t := time.Time(*ct).String()
return t
}
// Register the converter for CustomTime type format as 2006-01-02
var timeConverter = func(value string) reflect.Value {
fmt.Println("timeConverter", value)
if v, err := time.Parse("2006-01-02", value); err == nil {
return reflect.ValueOf(v)
}
return reflect.Value{}
}
customTime := fiber.ParserType{
Customtype: CustomTime{},
Converter: timeConverter,
}
// Add setting to the Decoder
fiber.SetParserDecoder(fiber.ParserConfig{
IgnoreUnknownKeys: true,
ParserType: []fiber.ParserType{customTime},
ZeroEmpty: true,
})
// Example to use CustomType, you pause custom time format not in RFC3339
type Demo struct {
Date CustomTime `form:"date" query:"date"`
Title string `form:"title" query:"title"`
Body string `form:"body" query:"body"`
}
app.Post("/body", func(c *fiber.Ctx) error {
var d Demo
c.BodyParser(&d)
fmt.Println("d.Date", d.Date.String())
return c.JSON(d)
})
app.Get("/query", func(c *fiber.Ctx) error {
var d Demo
c.QueryParser(&d)
fmt.Println("d.Date", d.Date.String())
return c.JSON(d)
})
// curl -X POST -F title=title -F body=body -F date=2021-10-20 http://localhost:3000/body
// curl -X GET "http://localhost:3000/query?title=title&body=body&date=2021-10-20"
|
SetUserContext
Sets the user specified implementation for context interface.
设置上下文接口的用户指定实现。
Signature
签名
1
| func (c *Ctx) SetUserContext(ctx context.Context)
|
Example
示例
1
2
3
4
5
6
7
| app.Get("/", func(c *fiber.Ctx) error {
ctx := context.Background()
c.SetUserContext(ctx)
// Here ctx could be any context implementation
// ...
})
|
Stale 陈旧
https://expressjs.com/en/4x/api.html#req.stale
Signature
签名
1
| func (c *Ctx) Stale() bool
|
Status 状态
Sets the HTTP status for the response.
设置响应的 HTTP 状态。
INFO
信息
Method is a chainable.
方法是可链接的。
Signature
签名
1
| func (c *Ctx) Status(status int) *Ctx
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
| app.Get("/fiber", func(c *fiber.Ctx) error {
c.Status(fiber.StatusOK)
return nil
}
app.Get("/hello", func(c *fiber.Ctx) error {
return c.Status(fiber.StatusBadRequest).SendString("Bad Request")
}
app.Get("/world", func(c *fiber.Ctx) error {
return c.Status(fiber.StatusNotFound).SendFile("./public/gopher.png")
})
|
Subdomains 子域
Returns a string slice 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.
应用程序属性子域偏移量,默认为 2
,用于确定子域段的开始。
Signature
签名
1
| func (c *Ctx) Subdomains(offset ...int) []string
|
Example
示例
1
2
3
4
5
6
7
8
| // Host: "tobi.ferrets.example.com"
app.Get("/", func(c *fiber.Ctx) error {
c.Subdomains() // ["ferrets", "tobi"]
c.Subdomains(1) // ["tobi"]
// ...
})
|
Type 类型
Sets the Content-Type HTTP header to the MIME type listed here specified by the file extension.
将 Content-Type HTTP 标头设置为此处列出的由文件扩展名指定的 MIME 类型。
Signature
签名
1
| func (c *Ctx) Type(ext string, charset ...string) *Ctx
|
Example
示例
1
2
3
4
5
6
7
8
9
| app.Get("/", func(c *fiber.Ctx) error {
c.Type(".html") // => "text/html"
c.Type("html") // => "text/html"
c.Type("png") // => "image/png"
c.Type("json", "utf-8") // => "application/json; charset=utf-8"
// ...
})
|
UserContext
UserContext returns a context implementation that was set by user earlier or returns a non-nil, empty context, if it was not set earlier.
UserContext 返回由用户较早设置的上下文实现,或者如果未较早设置,则返回非零空上下文。
Signature
签名
1
| func (c *Ctx) UserContext() context.Context
|
Example
示例
1
2
3
4
5
6
| app.Get("/", func(c *fiber.Ctx) error {
ctx := c.UserContext()
// ctx is context implementation set by user
// ...
})
|
Vary
Adds the given header field to the Vary response header. This will append the header, if not already listed, otherwise leaves it listed in the current location.
将给定的标头字段添加到 Vary 响应标头。如果尚未列出,这将追加标头,否则将其保留在当前位置中列出。
INFO
信息
Multiple fields are allowed.
允许多个字段。
Signature
签名
1
| func (c *Ctx) Vary(fields ...string)
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
| app.Get("/", func(c *fiber.Ctx) error {
c.Vary("Origin") // => Vary: Origin
c.Vary("User-Agent") // => Vary: Origin, User-Agent
// No duplicates
c.Vary("Origin") // => Vary: Origin, User-Agent
c.Vary("Accept-Encoding", "Accept")
// => Vary: Origin, User-Agent, Accept-Encoding, Accept
// ...
})
|
Write
Write adopts the Writer interface
Write 采用 Writer 接口
Signature
签名
1
| func (c *Ctx) Write(p []byte) (n int, err error)
|
Example
示例
1
2
3
4
5
| app.Get("/", func(c *fiber.Ctx) error {
c.Write([]byte("Hello, World!")) // => "Hello, World!"
fmt.Fprintf(c, "%s\n", "Hello, World!") // "Hello, World!Hello, World!"
})
|
Writef
Writef adopts the string with variables
Writef 采用带变量的字符串
Signature
签名
1
| func (c *Ctx) Writef(f string, a ...interface{}) (n int, err error)
|
Example
示例
1
2
3
4
5
6
| app.Get("/", func(c *fiber.Ctx) error {
world := "World!"
c.Writef("Hello, %s", world) // => "Hello, World!"
fmt.Fprintf(c, "%s\n", "Hello, World!") // "Hello, World!Hello, World!"
})
|
WriteString
WriteString adopts the string
WriteString 采用字符串
Signature
签名
1
| func (c *Ctx) WriteString(s string) (n int, err error)
|
Example
示例
1
2
3
4
5
| app.Get("/", func(c *fiber.Ctx) error {
c.WriteString("Hello, World!") // => "Hello, World!"
fmt.Fprintf(c, "%s\n", "Hello, World!") // "Hello, World!Hello, World!"
})
|
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).
一个布尔属性,即 true
,如果请求的 X-Requested-With 头字段是 XMLHttpRequest,则表示该请求是由客户端库(例如 jQuery)发出的。
Signature
签名
1
| func (c *Ctx) XHR() bool
|
Example
示例
1
2
3
4
5
6
7
| // X-Requested-With: XMLHttpRequest
app.Get("/", func(c *fiber.Ctx) error {
c.XHR() // true
// ...
})
|
XML
Converts any interface or string to XML using the standard encoding/xml
package.
使用标准 encoding/xml
包将任何接口或字符串转换为 XML。
INFO
信息
XML also sets the content header to application/xml.
XML 还将内容头设置为 application/xml。
Signature
签名
1
| func (c *Ctx) XML(data interface{}) error
|
Example
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| type SomeStruct struct {
XMLName xml.Name `xml:"Fiber"`
Name string `xml:"Name"`
Age uint8 `xml:"Age"`
}
app.Get("/", func(c *fiber.Ctx) error {
// Create data struct:
data := SomeStruct{
Name: "Grame",
Age: 20,
}
return c.XML(data)
// <Fiber>
// <Name>Grame</Name>
// <Age>20</Age>
// </Fiber>
})
|