0.5.5: SendStatus, SendString, SendBytes, update doc

This commit is contained in:
Fenny 2020-01-12 21:26:44 +01:00
parent 4d82b053ee
commit e65d0999a0
5 changed files with 200 additions and 4 deletions

View File

@ -434,6 +434,11 @@ func (ctx *Ctx) Send(args ...interface{}) {
} }
} }
// SendBytes : Same as Send() but without type assertion
func (ctx *Ctx) SendBytes(body []byte) {
ctx.Fasthttp.Response.SetBodyString(b2s(body))
}
// SendFile : // SendFile :
func (ctx *Ctx) SendFile(file string) { func (ctx *Ctx) SendFile(file string) {
// https://github.com/valyala/fasthttp/blob/master/fs.go#L81 // https://github.com/valyala/fasthttp/blob/master/fs.go#L81
@ -443,8 +448,20 @@ func (ctx *Ctx) SendFile(file string) {
} }
// SendStatus : // SendStatus :
func (ctx *Ctx) SendStatus() { func (ctx *Ctx) SendStatus(status int) {
ctx.Status(status)
// Only set status body when there is no response body
if len(ctx.Fasthttp.Response.Body()) == 0 {
msg := statusMessages[status]
if msg != "" {
ctx.Fasthttp.Response.SetBodyString(msg)
}
}
}
// SendString : Same as Send() but without type assertion
func (ctx *Ctx) SendString(body string) {
ctx.Fasthttp.Response.SetBodyString(body)
} }
// Set : // Set :

View File

@ -67,7 +67,7 @@ app.Get("/", func(c *fiber.Ctx) {
user, pass, ok := c.BasicAuth() user, pass, ok := c.BasicAuth()
if !ok || user != "john" || pass != "doe" { if !ok || user != "john" && pass != "doe" {
c.Status(403).Send("Forbidden") c.Status(403).Send("Forbidden")
return return
} }
@ -606,6 +606,19 @@ 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)
// Example
app.Get("/", func(c *fiber.Ctx) {
c.SendBytes([]byte("Hello, World!"))
})
```
#### SendFile #### SendFile
Transfers the file at the given path. Sets the Content-Type response HTTP header field based on the filenames extension. Transfers the file at the given path. Sets the Content-Type response HTTP header field based on the filenames extension.
```go ```go
@ -619,7 +632,36 @@ app.Get("/not-found", func(c *fiber.Ctx) {
``` ```
#### SendStatus #### SendStatus
!> Planned for V1 Sets the status code, but also the correct status message in the body if the response body is still empty.
```go
// Function signature
c.SendStatus(status int)
// Example
app.Get("/not-found", func(c *fiber.Ctx) {
c.SendStatus(415)
// Status: 415
// Body: "Unsupported Media Type"
c.Send("Hello, World!")
c.SendStatus(415)
// Status: 415
// Body: "Hello, World!"
})
```
#### SendString
Same as Send() but without type assertion.
I suggest using this in production for optimal performance.
```go
// Function signature
c.SendString(body string)
// Example
app.Get("/", func(c *fiber.Ctx) {
c.SendString("Hello, World!")
})
```
#### Set #### Set
Sets the responses HTTP header field to value. To set multiple fields at once, pass an object as the parameter. Sets the responses HTTP header field to value. To set multiple fields at once, pass an object as the parameter.

View File

@ -42,8 +42,10 @@ Route
SaveFile SaveFile
Secure Secure
Send Send
SendBytes
SendFile SendFile
SendStatus SendStatus
SendString
Set Set
Write Write
SignedCookies SignedCookies

View File

@ -18,7 +18,7 @@ import (
const ( const (
// Version for debugging // Version for debugging
Version = `0.5.0` Version = `0.5.5`
// Port and Version are printed with the banner // Port and Version are printed with the banner
banner = `%s _____ _ _ banner = `%s _____ _ _
| __|_| |_ ___ ___ | __|_| |_ ___ ___

135
status.go Normal file
View File

@ -0,0 +1,135 @@
package fiber
// https://github.com/valyala/fasthttp/blob/master/status.go
const (
StatusContinue = 100 // RFC 7231, 6.2.1
StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2
StatusProcessing = 102 // RFC 2518, 10.1
StatusOK = 200 // RFC 7231, 6.3.1
StatusCreated = 201 // RFC 7231, 6.3.2
StatusAccepted = 202 // RFC 7231, 6.3.3
StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4
StatusNoContent = 204 // RFC 7231, 6.3.5
StatusResetContent = 205 // RFC 7231, 6.3.6
StatusPartialContent = 206 // RFC 7233, 4.1
StatusMultiStatus = 207 // RFC 4918, 11.1
StatusAlreadyReported = 208 // RFC 5842, 7.1
StatusIMUsed = 226 // RFC 3229, 10.4.1
StatusMultipleChoices = 300 // RFC 7231, 6.4.1
StatusMovedPermanently = 301 // RFC 7231, 6.4.2
StatusFound = 302 // RFC 7231, 6.4.3
StatusSeeOther = 303 // RFC 7231, 6.4.4
StatusNotModified = 304 // RFC 7232, 4.1
StatusUseProxy = 305 // RFC 7231, 6.4.5
// StatusSwitchProxy = 306 // RFC 7231, 6.4.6 (Unused)
StatusTemporaryRedirect = 307 // RFC 7231, 6.4.7
StatusPermanentRedirect = 308 // RFC 7538, 3
StatusBadRequest = 400 // RFC 7231, 6.5.1
StatusUnauthorized = 401 // RFC 7235, 3.1
StatusPaymentRequired = 402 // RFC 7231, 6.5.2
StatusForbidden = 403 // RFC 7231, 6.5.3
StatusNotFound = 404 // RFC 7231, 6.5.4
StatusMethodNotAllowed = 405 // RFC 7231, 6.5.5
StatusNotAcceptable = 406 // RFC 7231, 6.5.6
StatusProxyAuthRequired = 407 // RFC 7235, 3.2
StatusRequestTimeout = 408 // RFC 7231, 6.5.7
StatusConflict = 409 // RFC 7231, 6.5.8
StatusGone = 410 // RFC 7231, 6.5.9
StatusLengthRequired = 411 // RFC 7231, 6.5.10
StatusPreconditionFailed = 412 // RFC 7232, 4.2
StatusRequestEntityTooLarge = 413 // RFC 7231, 6.5.11
StatusRequestURITooLong = 414 // RFC 7231, 6.5.12
StatusUnsupportedMediaType = 415 // RFC 7231, 6.5.13
StatusRequestedRangeNotSatisfiable = 416 // RFC 7233, 4.4
StatusExpectationFailed = 417 // RFC 7231, 6.5.14
StatusTeapot = 418 // RFC 7168, 2.3.3
StatusUnprocessableEntity = 422 // RFC 4918, 11.2
StatusLocked = 423 // RFC 4918, 11.3
StatusFailedDependency = 424 // RFC 4918, 11.4
StatusUpgradeRequired = 426 // RFC 7231, 6.5.15
StatusPreconditionRequired = 428 // RFC 6585, 3
StatusTooManyRequests = 429 // RFC 6585, 4
StatusRequestHeaderFieldsTooLarge = 431 // RFC 6585, 5
StatusUnavailableForLegalReasons = 451 // RFC 7725, 3
StatusInternalServerError = 500 // RFC 7231, 6.6.1
StatusNotImplemented = 501 // RFC 7231, 6.6.2
StatusBadGateway = 502 // RFC 7231, 6.6.3
StatusServiceUnavailable = 503 // RFC 7231, 6.6.4
StatusGatewayTimeout = 504 // RFC 7231, 6.6.5
StatusHTTPVersionNotSupported = 505 // RFC 7231, 6.6.6
StatusVariantAlsoNegotiates = 506 // RFC 2295, 8.1
StatusInsufficientStorage = 507 // RFC 4918, 11.5
StatusLoopDetected = 508 // RFC 5842, 7.2
StatusNotExtended = 510 // RFC 2774, 7
StatusNetworkAuthenticationRequired = 511 // RFC 6585, 6
)
var statusMessages = map[int]string{
StatusContinue: "Continue",
StatusSwitchingProtocols: "Switching Protocols",
StatusProcessing: "Processing",
StatusOK: "OK",
StatusCreated: "Created",
StatusAccepted: "Accepted",
StatusNonAuthoritativeInfo: "Non-Authoritative Information",
StatusNoContent: "No Content",
StatusResetContent: "Reset Content",
StatusPartialContent: "Partial Content",
StatusMultiStatus: "Multi-Status",
StatusAlreadyReported: "Already Reported",
StatusIMUsed: "IM Used",
StatusMultipleChoices: "Multiple Choices",
StatusMovedPermanently: "Moved Permanently",
StatusFound: "Found",
StatusSeeOther: "See Other",
StatusNotModified: "Not Modified",
StatusUseProxy: "Use Proxy",
StatusTemporaryRedirect: "Temporary Redirect",
StatusPermanentRedirect: "Permanent Redirect",
StatusBadRequest: "Bad Request",
StatusUnauthorized: "Unauthorized",
StatusPaymentRequired: "Payment Required",
StatusForbidden: "Forbidden",
StatusNotFound: "Not Found",
StatusMethodNotAllowed: "Method Not Allowed",
StatusNotAcceptable: "Not Acceptable",
StatusProxyAuthRequired: "Proxy Authentication Required",
StatusRequestTimeout: "Request Timeout",
StatusConflict: "Conflict",
StatusGone: "Gone",
StatusLengthRequired: "Length Required",
StatusPreconditionFailed: "Precondition Failed",
StatusRequestEntityTooLarge: "Request Entity Too Large",
StatusRequestURITooLong: "Request URI Too Long",
StatusUnsupportedMediaType: "Unsupported Media Type",
StatusRequestedRangeNotSatisfiable: "Requested Range Not Satisfiable",
StatusExpectationFailed: "Expectation Failed",
StatusTeapot: "I'm a teapot",
StatusUnprocessableEntity: "Unprocessable Entity",
StatusLocked: "Locked",
StatusFailedDependency: "Failed Dependency",
StatusUpgradeRequired: "Upgrade Required",
StatusPreconditionRequired: "Precondition Required",
StatusTooManyRequests: "Too Many Requests",
StatusRequestHeaderFieldsTooLarge: "Request Header Fields Too Large",
StatusUnavailableForLegalReasons: "Unavailable For Legal Reasons",
StatusInternalServerError: "Internal Server Error",
StatusNotImplemented: "Not Implemented",
StatusBadGateway: "Bad Gateway",
StatusServiceUnavailable: "Service Unavailable",
StatusGatewayTimeout: "Gateway Timeout",
StatusHTTPVersionNotSupported: "HTTP Version Not Supported",
StatusVariantAlsoNegotiates: "Variant Also Negotiates",
StatusInsufficientStorage: "Insufficient Storage",
StatusLoopDetected: "Loop Detected",
StatusNotExtended: "Not Extended",
StatusNetworkAuthenticationRequired: "Network Authentication Required",
}