Vapor系列教程 - Middleware

Swift国内社区: SwiftMic


Middleware 是现代 Web 框架中必不可少的一部分。通过 Middleware 可以单独处理 Request 和 Response,极其方便。

Middleware

基本用法


SampleMiddleware.swift

import Vapor
import HTTP

class SampleMiddleware: Middleware {

    func respond(to request: Request, chainingTo chain: Responder) throws -> Response {
        // You can manipulate the request before calling the handler
        // and abort early if necessary, a good injection point for
        // handling auth.

        // 此处可统一处理 Request 请求

        let response = try chain.respond(to: request)

        // 此处可统一处理 Response 响应

        // You can also manipulate the response to add headers
        // cookies, etc.

        return response

        // Vapor Middleware is based on S4 Middleware.
        // This means you can share it with any other project
        // that uses S4 Middleware. 
    }

}

main.swift

drop.middleware.append(SampleMiddleware())

每次 Request 和 Response 都将会响应到 SampleMiddleware 中的 respond 方法。

示例1


如果想给所有 API 的 Response 增加一个版本号字段,可直接在 SampleMiddleware 中添加代码: response.headers["Api_Version"] = "v1" 即可,而无需在每个 Response 中进行设置。

import Vapor
import HTTP

class SampleMiddleware: Middleware {

    func respond(to request: Request, chainingTo chain: Responder) throws -> Response {
        
        let response = try chain.respond(to: request)

        response.headers["Api_Version"] = "v1"

        return response
    }

}

示例2


有些 API 需要登录后才能调用,这里涉及到用户鉴权的问题,可通过 Middleware 统一处理 token 异常情况,而无需在每个 Response 中处理。

定义异常类型

enum ZException: Error {
    case ERROR_AUTH_TOKEN_INVALID
}

ERROR_AUTH_TOKEN_INVALID 异常类型统一处理

import Vapor
import HTTP

class SampleMiddleware: Middleware {

    func respond(to request: Request, chainingTo chain: Responder) throws -> Response {
        do {
            return try chain.respond(to: request)
        } catch ZException.ERROR_AUTH_TOKEN_INVALID {
            throw Abort.custom(status: .unauthorized, message: "ERROR_AUTH_TOKEN_INVALID")
        }
    }

}

当检测到 token 无效时,只需要抛出 ERROR_AUTH_TOKEN_INVALID 异常即可。

throw ZException.ERROR_AUTH_TOKEN_INVALID

Go to Vapor系列教程 - 目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,302评论 19 139
  • Refer to: www.threemeal.com/blog/12/ 中间件 中间件是一个钩子框架,它们可以介...
    兰山小亭阅读 16,629评论 9 165
  • 注意:更新iOS 9.3, and Swift 2.2- 2016年4月2日 原文https://www.rayw...
    Tippi阅读 9,816评论 0 2
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,191评论 4 61
  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 14,366评论 4 46