BodyParser
public class BodyParser : RouterMiddleware
The BodyParser parses the body of the request prior to sending it to the handler. It reads the Content-Type of the message header and populates the RouterRequest body field with a corresponding ParsedBody enumeration.
In order for the BodyParser to be used it must first be registered with any routes that are interested in the ParsedBody payload.
ParsedBody enumeration:
The mappings from the incoming Content-Type to an internal representation of the body are as follows:
.json([String: Any]) // "application/json"
.text(String) // "text/*"
.urlEncoded([String:String]) // "application/x-www-form-urlencoded"
.multipart([Part]) // "multipart/form-data"
.raw(Data) // Any other Content-Type
Each case has a corresponding convenience property, e.g. asURLEncoded: [String:String], for accessing the associated data.
Note: If you have not declared a Content-Type header, ParsedBody will be nil.
Usage Example:
In this example, all routes to the BodyParser middleware are registered to the BodyParser middleware. A request with “application/json”, ContentType header is received. It is then parsed as JSON and the value for “name” is returned in the response.
router.all("/name", middleware: BodyParser())
router.post("/name") { request, response, next in
guard let jsonBody = request.parsedBody?.asJSON else {
next()
return
}
let name = jsonBody["name"] as? String ?? ""
try response.send("Hello \(name)").end()
}
Note: When using Codable Routing in Kitura 2.x the BodyParser should not be registered to any codable routes (doing so will log the following error “No data in request. Codable routes do not allow the use of a BodyParser.” and the route handler will not be executed).
-
Initializes a BodyParser instance. Needed since default initalizer is internal.
Usage Example:
let middleware = BodyParser()Declaration
Swift
public init() -
This function is called by the Kitura
Routerwhen an incoming request matches the route provided when the BodyParser was registered with theRouter. It performs the parsing of the body content usingparse(_:contentType). We don’t expect a user to call this function directly.Declaration
Swift
public func handle(request: RouterRequest, response: RouterResponse, next: @escaping () -> Void) throwsParameters
requestThe
RouterRequestobject used to work with the incoming HTTP request.responseThe
RouterResponseobject used to respond to the HTTP request.nextThe closure called to invoke the next handler or middleware associated with the request.
-
This function is called by the Kitura
Routerwhen an incoming request matches the route provided when the BodyParser was registered with theRouter. Themiddleware.handle(...)function will parse the body content of an incoming request using this function. A user can call this function directly but ordinarily won’t need to.Usage Example:
In this example, the body of the request is parsed to be of the passed in contentType.
request.body = BodyParser.parse(request, contentType: contentType)Declaration
Swift
public class func parse(_ message: RouterRequest, contentType: String?) -> ParsedBody?Parameters
messageMessage coming from the socket.
contentTypeThe content type as a String.
Return Value
The parsed body.
-
Read the body data of the request.
Usage Example:
In this example, the body of the request is read into a constant (called bodyData) using an instance of
RouterRequest(called request).let bodyData = try readBodyData(with: request)Throws
Socket.Error if an error occurred while reading from a socket.Declaration
Swift
public class func readBodyData(with reader: RouterRequest) throws -> DataParameters
withThe socket reader.
Return Value
The body data associated with the request.
View on GitHub
BodyParser Class Reference