VaporErrorKit

使用 SPM 安装

.package(url: "https://github.com/Einstore/VaporErrorKit.git", from: "0.0.1")

概念

允许与框架无关的服务器端库拥有通用的错误类型,同时允许在最终应用程序中轻松进行错误处理。

WebError 库由三个产品组成

基本用法

使你的错误符合 WebError (来自 WebErrorKit 包)

如果你的错误是 String RawRepresentable (String 枚举),你将免费获得 code 属性 (参见下面的响应输出)

enum MyError: String, WebError {

    case somethingHasHappened
    
}

上面的错误将生成以下错误响应

// Status 500
{
    "code": "my_error.something_has_happened"
}

自定义用法

enum MyError: String, WebError {
    
    case somethingHasHappened
    
    var statusCode: Int {
        return 417
    }
    
    var reason: String? {
        return "Something has happened!!!"
    }
    
}

上面的错误将生成以下错误响应

// Status 417
{
    "code": "my_error.something_has_happened",
    "reason": "Something has happened!!!"
}

自定义枚举类型

对于不符合 StringRawRepresentable 的错误,你可以如下使用 SerializableWebError

enum MyError: SerializableWebError {

    case itsComplicated(complication: String)

    var serializedCode: String {
        switch self {
        case .itsComplicated(complication: let c):
            return "its_complicated:\(c)"
        }
    }

}

上面的错误将生成以下错误响应

// Status 500
{
    "code": "my_error.its_complicated:huge_problem"
}

与 Vapor 集成

WebErrorMiddleware

在你的 configure 方法中注册 WebErrorMiddleware

s.register(MiddlewareConfiguration.self) { c in
    // Create _empty_ middleware config
    var middlewares = MiddlewareConfiguration()

    // Catches errors and converts to HTTP response
    try middlewares.use(c.make(WebErrorMiddleware.self))

    return middlewares
}

处理 Swift.Error

处理 Vapor.AbortError

基础错误类型。

作者

Ondrej Rafaj @rafiki270

许可证

MIT; Copyright 2019 - Einstore