Сделать маршрут как промежуточным, так и окончательным? - PullRequest
2 голосов
/ 07 ноября 2019

При создании приложения с PerfectHTTP Я столкнулся с проблемой маршрутизации: маршруты, которые используются в качестве промежуточных маршрутов, также не могут использоваться в качестве конечных маршрутов.

При настройкекак показано ниже, некоторые URL-адреса отслеживаются правильно (/index.html в примере), в то время как некоторые URL-адреса не отслеживаются (/ в примере).

Есть ли какой-то особый соус, который мне здесь не хватает, или есть что? Я пытаюсь сделать просто невозможно с помощью Perfect? ​​

import PerfectHTTP
import PerfectHTTPServer

// This does various housekeeping to set things common to all requests.
var routes = Routes() {
  request, response in

  Log.info(message: "\(request.method) \(request.uri)")
  response
    .setHeader(.contentType, value: "text/plain")
    .next()
}

// For this handler, http://localhost:8181/index.html works,
// but http://localhost:8181/ does not
routes.add(method: .get, uris: ["/", "index.html"]) {
  request, response in
  response
    .appendBody(string: "Hello, world!")
    .completed()
}

HTTPServer.launch(.server(name: "localhost", port: 8181, routes: [routes]))

1 Ответ

0 голосов
/ 10 ноября 2019

, если вы хотите установить общие для всех запросов. использовать фильтр.

мои маршруты работают

узнать больше https://perfect.org/docs/filters.html

var routes = Routes()
routes.add(method: .get, uris: ["/", "index.html"]) {
  request, response in
  response
    .appendBody(string: "Hello, world!")
    .completed()
}

struct MyFilter: HTTPRequestFilter {
    func filter(request: HTTPRequest, response: HTTPResponse, callback: (HTTPRequestFilterResult) -> ()) {
        print("request method: \(request.method)")
        callback(.continue(request, response))
    }
}

do {
    let server = HTTPServer()
    server.serverName = "testServer"
    server.serverPort = 8181
    server.addRoutes(routes)
    server.setRequestFilters([(MyFilter(), HTTPFilterPriority.high)])
    try server.start()
} catch {
    fatalError("\(error)") // fatal error launching one of the servers
}
...