【问题标题】:Saving Bytes Vapor Swift节省字节蒸汽 Swift
【发布时间】:2017-10-18 01:04:51
【问题描述】:

我需要一些关于在 Vapor 中保存字节的帮助: 我有这个图像类:

class Image: Model {
var id: Node?
var datas: Bytes
var name: String
var exists: Bool = false

init(name: String, datas: Bytes) {
    self.name = name
    self.datas = datas
}

// NodeInitializable
required init(node: Node, in context: Context) throws {
    self.id = try node.extract("id")
    self.datas = try node.extract("datas")
    self.name = try node.extract("name")
}

// NodeRepresentable
func makeNode(context: Context) throws -> Node {
    return try Node(node: ["id": id,
                           "name": name,
                           "datas": datas.string()
                           ])
}

// Preparation
static func prepare(_ database: Database) throws {


    try database.create("images") { categories in
        categories.id()
        categories.string("name")
        categories.data("datas")
    }


}

static func revert(_ database: Database) throws {
    try database.delete("images")
}

}

我正在向 Postman 发送带有此正文的 POST 请求:

{ "name": "politique.jpg", "datas": [122, 122] }

然后它在我的数据库中创建一个带有数据的新行。

但是当我在这张图片上尝试 GET 时,我在提取对象时遇到了这个错误:

无法初始化图像,跳过:unableToConvert(node: 可选(Node.Node.bytes([101, 110, 111, 61])),预期:“UInt8”)

我在这里做错了什么?谢谢大家。

【问题讨论】:

    标签: swift postgresql byte vapor


    【解决方案1】:

    extract 方法不支持在 Vapor 1 中初始化数组。您需要使用以下方式手动提取数据:

    self.datas = node["datas"]?.bytes ?? []
    

    为什么?

    问题在于,我们很难判断像 [1,2,3] 这样的东西何时是一个单独的 JSON 数字数组,以及它何时表示数据集合。例如:

    scores: [1, 10, 44, 5]
    

    可能希望是一个 JSON 数组,其中类似:

    image: [1, 10, 44, 5] 
    

    代表原始数据。

    一般来说,由于单个对象更常见,因此我们优先考虑这一点,用户必须选择通过我们提供的便利(如上面的代码)来访问字节和事物。

    【讨论】:

    • 这看起来很有希望。然而,当我尝试这条线时:self.datas = node["datas"]?.bytes ?? [] 我得到错误Enum element 'bytes' cannot be referenced as an instance member。有什么想法吗?干杯
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2020-10-17
    • 2020-05-15
    • 2020-12-23
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多