标签: vapor

Vapor 3 内容转 JSON 转字符串

我正在编写一个 Vapor 3 项目,该项目以键:值对的形式写入 FoundationDB 数据库。我有以下代码,使用一个名为 Country 的结构来扩展 Content。我想将国家/地区数据保存为 JSON 字符串,然后将其转换为要保存的字节。

func createCountry(req: Request, country: Country) throws -> Future<Country>{

    return try req.content.decode(Country.self).map(to: Country.self) { country in

        let dbConnection = FDBConnector()
        let CountryKey = Tuple("iVendor", "Country", country.country_name).pack()
        let countryValue = COUNTRY_TO_JSON_TO_STRING_FUNCTION
        let success = dbConnection.writeRecord(pathKey: CountryKey, value: countryValue )

        if success {

            return country
       } //else {

            return country
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何将结构转换为以字符串形式存储的 JSON?

json swift vapor

4
推荐指数
1
解决办法
1369
查看次数

如何在路由时在请求中传递参数(使用 Vapor 的服务器端 Swift)

我正在 Swift 中使用 Vapor 框架编写一个 Web 服务。

在我的应用程序中,我有用户模型。以下是我如何为所有用户路由获取请求。

router.get("users") { request in
    return User.query(on: request).all()
}
Run Code Online (Sandbox Code Playgroud)

在本地运行服务器后,为了获取用户,我可以发出如下请求localhost:8080/users

现在,我想向请求添加参数以使用户超过给定年龄。该请求看起来像localhost:8080/users?above_age=25

如何使用Vapor框架在请求中添加参数?我尝试使用可用的文档,但我无法弄清楚。

由于我现在开始使用 Vapor 进行服务器端 Swift,因此对使用 Vapor 3 的资源的任何引用也将对我可能遇到的其他问题有所帮助。谢谢!

swift vapor server-side-swift

4
推荐指数
1
解决办法
1962
查看次数

在 Vapor 的迁移中添加默认值

如何在流畅迁移中为非可选字段添加默认值?我目前有这个错误:

?? PostgreSQL Error: column "firstName" contains null values
Run Code Online (Sandbox Code Playgroud)

我唯一的选择是

public func field<T>(for key: KeyPath<Self.Model, T>, isIdentifier: Bool? = nil)
public func field<T>(for key: KeyPath<Self.Model, T>, type: Self.Model.Database.SchemaFieldType)
Run Code Online (Sandbox Code Playgroud)

编辑:感谢蒂姆的回答,解决方案是:

static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
        return Database.update(User.self, on: conn) { builder in
            builder.field(for: \User.firstName, type: .text, .default(.literal("")))
        }
    }
Run Code Online (Sandbox Code Playgroud)

swift vapor vapor-fluent

4
推荐指数
2
解决办法
855
查看次数

使用 Swift 5 的 Vapor 安装问题(第一次使用 Vapor)

安装蒸汽后,我得到以下错误

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib Referenced from: /usr/local/bin/vapor Reason: image not found Abort trap: 6

这是我的问题,我不知道如何解决。即使我无法创建新项目。请帮忙。

ios swift vapor

4
推荐指数
1
解决办法
191
查看次数

如何在Vapor 4中设置Content-Type响应头?

我的应用程序使用 Vapor 4.3 并具有发送 HTML 片段作为响应的简单路由:

import Vapor

func routes(_ app: Application) throws {
  app.get("hello") { _ -> String in
    "<html><body>Hello, world!</body></html>"
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,此响应没有Content-Type设置正确的 HTTP 标头,因此当在浏览器中打开此路由时,它不会呈现为正确的 HTML。在此响应上设置标头的最佳方法是什么Content-Type

content-type httpresponse swift vapor

4
推荐指数
1
解决办法
1324
查看次数

Swift - 错误:套接字 SO_ERROR [61:连接被拒绝]

我想用 swift 将 Web 服务器连接到我的 ios 应用程序。所以我创建了一个函数来创建一个带有“POST”的任务,但是当我调用它时,我收到一条错误消息:

nw_socket_handle_socket_event [C1.1:2] 套接字 SO_ERROR [61:连接被拒绝]

我的代码:

func createDish(dish :Dish) {
   
    let url = URL(string :"http://localhost:8080/dish)!
    var request = URLRequest(url :url)
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    
    if let data = try? JSONEncoder().encode(dish) {
        request.httpBody = data
    }
    
    URLSession.shared.dataTask(with: request) { data, response, error in
        
        if let error = error {
            print(error.localizedDescription)
            return
        }
        if let data = data {
            if let dish = try? JSONDecoder().decode(Dish.self, from: data)
            {
                self.dishes.append(dish)
            }
        }
    }.resume()
} …
Run Code Online (Sandbox Code Playgroud)

post server vapor

4
推荐指数
1
解决办法
4182
查看次数

Vapor 4 不区分大小写的查询

在 Vapor 3 中,您可以使用filter带有 SQLiteBinaryOperator 的方法,因此您可以使用类似运算符创建查询。我正在尝试在 Vapor 4 中做完全相同的事情,但找不到任何东西。这是我的代码

蒸气 4

func queryUserMovies(_ req: Request) throws -> Future<[Users]> {
    let title = req.parameters.get("title")!
    return Movies.query(on: req.db).filter(\.$title == title).first().unwrap(or:Abort(.notFound, reason: "There's no movie")).flatMap{ movie in
        return movie.$users.query(on: req.db).all()
    }
}
Run Code Online (Sandbox Code Playgroud)

蒸气 3

func queryUserMovies(_ req: Request) throws -> Future<[Users]> {
    guard let movie = req.query[String.self, at: "movie"] else {
        throw Abort(.badRequest, reason: "Not such movie")
    }
    return Movies.query(on: req).filter(\.title, .like, movie).first().unwrap(or:Abort(.notFound, reason: "There's no movie")).flatMap{ movie in
        return movie.users.query(on: …
Run Code Online (Sandbox Code Playgroud)

fluent swift vapor vapor-fluent

4
推荐指数
1
解决办法
336
查看次数

如何使用 Vapor Swift 获取 URL 的 HTML?

在我的一条路线中,我想从不同的站点获取 HTML。https://docs.vapor.codes/4.0/content/ documents支持 JSON 等,但我在原始 HTML 上找不到任何内容。

request.client.get(URI(string: "https://example.com/")).map { (response: ClientResponse) -> String? in
    if response.status == .ok && response.content.contentType == .html {
        return response.content... // How do I get raw html?
    }

    return nil
}
Run Code Online (Sandbox Code Playgroud)

如何从客户端响应中获取原始 HTML?

response request swift vapor

4
推荐指数
1
解决办法
220
查看次数

如何杀死蒸气服务器

我正在尝试使用 Vapor 构建一个非常简单的服务。它取决于 websockets,我在模拟器中的 iOS 设备和本地主机上运行的蒸汽之间建立连接。

当我想对服务器进行更改时,我会重新启动,有时会得到 [ ERROR ] bind(descriptor:ptr:bytes:): Address already in use (errno: 48)

我不知道如何找到并杀死这个进程,它是一个运行在 8080 上的套接字。我必须重新启动才能摆脱它,并且在重复几次后我感觉要把计算机扔出窗外(已经有这个问题了)在 mentalHealthOverflow.com 中询问)。

我怎样才能找到并终止这个进程?停止模拟器设备不会这样做。

kill ios swift server vapor

4
推荐指数
2
解决办法
387
查看次数

如何在 Vapor 4 中将正文(ByteBuffer)解码为内容?

当 ResponseReceipt 符合此处的内容协议时,我可以轻松解码 response.content,如 Vapor 文档中所述。

let receipt = try? response.content.decode(ResponseReceipt.self)
Run Code Online (Sandbox Code Playgroud)

但是使用Vapor的工具来解码response.body并不那么容易理解,因为它是ByteBuffer。如何以与 Vapor 类似的方式解码response.body?

json decode swift vapor

4
推荐指数
1
解决办法
1269
查看次数