【问题标题】:How do I write a middleware for vapor web framework?如何为 vapor web 框架编写中间件?
【发布时间】:2016-10-02 06:32:36
【问题描述】:

使用工具箱命令创建了一个新项目:vapor new projectname

在 main.swift 文件中我添加了中间件代码:

import Vapor
import HTTP

final class VersionMiddleware: Middleware {
    func respond(to request: Request, chainingTo next: Responder) throws -> Response {
        let response = try next.respond(to: request)

        response.headers["Version"] = "API v1.0"
        print("not printing")

        return response
    }
}

let drop = Droplet(availableMiddleware: [
    "version": VersionMiddleware()
])

drop.get("hello") {
    req in 
    return "Hello world"
} 

drop.run()

但是当我运行它时,它会打印“hello world”,但 API 版本不会添加到标题中。我正在使用邮递员检查它。

【问题讨论】:

    标签: swift vapor


    【解决方案1】:

    我觉得你应该配置Config/middleware.json

    {
    "server": [
        ...
        "version"
    ],
    ...
    }
    

    会成功的。

    middleware document

    【讨论】:

      【解决方案2】:

      Vapor 1 ➙ 2 迁移注意:“中间件”排序配置已从 Config/middleware.json 移至 Config/droplet.json。

      蒸汽 2

      在 Vapor 2 中,可以按如下方式创建、添加和配置中间件:

      Sources/App/Middleware/ExampleMiddleware.swift

      final class ExampleMiddleware: Middleware {
        func respond(to request: Request, chainingTo next: Responder) throws -> Response {
          // if needed, process inbound `request` here.
          // Swift.print(request.description)
      
          // pass next inbound `request` to next middleware in processing chain
          let response: Response = try next.respond(to: request)
      
          // if needed, process outbound `response` here
          // Swift.print(response.description)
      
          // return `response` to chain back up any remaining middleware to client
          return response
        }
      }
      

      Sources/App/Setup/Config+Setup.swift

      extension Config {
        public func setup() throws {
          …
          try setupMiddleware()
          …
        }
      
        public func setupMiddleware() throws {
          self.addConfigurable(
              middleware: ExampleMiddleware(), 
              name: "example" 
          )     
        }
      }
      

      配置/droplet.json

      "middleware": [
          …,
          "example"
      ],
      

      注意:直接包含在 Vapor 2 中的中间件(例如“error”、“sessions”、“file”、“date”、“cors”)将在没有 addConfigurable(middleware, name) 设置的情况下用于 Config/droplet.json "middleware"一步。

      Vapor 2 Docs: Middleware ⇗

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-12
        • 2023-04-09
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多