我为这样的用户制作了一个模型:
import Vapor
import Fluent
import Foundation
final class User: Model {
var id: Node?
var username: String
var name : String
var surename : String
var password : String
var credit : String
var isBlocked : String
var isAdmin : String
init(username: String, name: String, surename: String, password: String, credit: String, isBlocked: String, isAdmin: String) {
self.id = UUID().uuidString.makeNode()
self.username = username
self.name = name
self.surename = surename
self.password = password
self.credit = credit
self.isBlocked = isBlocked
self.isAdmin = …Run Code Online (Sandbox Code Playgroud) 将steam postgresql连接器添加到Package.swift后出现构建错误
import PackageDescription
let package = Package(
name: "todo_vapor_swift",
dependencies: [
.Package(url: "https://github.com/vapor/vapor.git", majorVersion: 1, minor: 5),
.Package(url: "https://github.com/vapor/postgresql-provider", majorVersion: 1, minor: 0)
],
exclude: [
"Config",
"Database",
"Localization",
"Public",
"Resources",
]
Run Code Online (Sandbox Code Playgroud)
)
我只想拥有一个控制器操作,该操作基本上与直接通过Public/文件夹访问图像相同。区别在于路由可以是您想要的任何路径,返回的图像将是在控制器功能内部确定的图像。但是,如何做出适当的回应?
我的方法如下所示:
import Vapor
final class ImageController {
func read(_ req: Request) throws -> Future<Data> {
let directory = DirectoryConfig.detect()
let promise = req.eventLoop.newPromise(Data.self)
req.eventLoop.execute {
do {
let data = try Data(contentsOf: URL(fileURLWithPath: directory.workDir)
.appendingPathComponent("Public", isDirectory: true)
.appendingPathComponent("image.png"))
promise.succeed(result: data)
} catch {
promise.fail(error: error)
}
}
return promise.futureResult
// try req.content.encode(data, as: .png)
}
}
Run Code Online (Sandbox Code Playgroud)
但是在我看来,我过于复杂了,对吗?
在Vapor 3上使用了大量的教程,我没有弄清楚如何编辑输出JSON,以获得特定的用户对象我创建路径:
protectedRouter.get("users", User.parameter, use: userController.user)
Run Code Online (Sandbox Code Playgroud)
方法在UserController:
func user(_ req: Request) throws -> Future<User> {
return try req.parameters.next(User.self)
}
Run Code Online (Sandbox Code Playgroud)
当然,它会发送User对象内的所有内容,包括电子邮件和散列密码.大.我怎么能避免这个?我的意思是我只想发送有关用户的公共信息(姓名,昵称,身份证等).
我正在构建一个类似于在Vapor auth-template模板中使用的基本身份验证设置(从这里开始).我将所有内容设置为与模板中相同的方式.
但是,我想加盐.我可以在创建时为用户生成一个salt:
static func create(_ req: Request, newUserRequest user: CreateUserRequest) throws -> Future<User.Public> {
return User.query(on: req).filter(\.username == user.username).first().flatMap { existingUser in
guard existingUser == nil else {
throw Abort(.badRequest, reason: "A user with the given username already exists.")
}
guard user.password == user.passwordVerification else {
throw Abort(.badRequest, reason: "Given passwords did not match.")
}
let count = 16
var pw_salt_data = Data(count: count)
let _ = pw_salt_data.withUnsafeMutableBytes { mutableBytes in
SecRandomCopyBytes(kSecRandomDefault, count, mutableBytes)
}
let …Run Code Online (Sandbox Code Playgroud) 我不知道如何跟踪来自外部 URL 的重定向。我访问的 URL 出于某种原因给了我 301,即使我没有在邮递员那里得到它。我想知道如何让 HTTPClient 跟随重定向,或者我是否做错了什么以获得 301。
我确实读过这个 PR,但我认为它不再相关了。HTTPClient 文档也不包括重定向。在下面的示例中,我将 User-Agent 设置为与 Postman 相同,以尽可能模仿 Postman 的请求。
到目前为止我的代码:
import Vapor
import HTTP
protocol DataFetching {
func getFromURL(_ url: URL, on worker: Worker) throws -> Future<HTTPResponse>
}
class DataFetcher: DataFetching {
enum Error: Swift.Error {
case unknown
}
func getFromURL(_ url: URL, on worker: Worker) throws -> Future<HTTPResponse> {
guard let host = url.host else { throw Error.unknown }
var headers = HTTPHeaders()
headers.replaceOrAdd(name: .userAgent, value: …Run Code Online (Sandbox Code Playgroud) 我想弄清楚如何等待多个期货完成。我知道如何异步等待它们:
summaryFuture.whenSuccess {}但这只是处理一种情况。我需要等待 summaryFuture 和sponsorFuture 完成,然后在发回响应之前处理两者。
let summaryFuture = client.post(summaryURL) { post in
post.http.headers.add(name: "authtoken", value: token)
}.flatMap(to: SummaryModel.self) { (response) in
return try response.content.decode(SummaryModel.self)
}
let sponsorEnrollerFuture = client.post(sponsporEnroller) { post in
post.http.headers.add(name: "authtoken", value: token)
}.flatMap(to: SponsorEnrollerModel.self) { (response) in
return try response.content.decode(SponsorEnrollerModel.self)
}
Run Code Online (Sandbox Code Playgroud) 我想在Vapor 3中使用一些参数进行后期调用。
POST: http://www.example.com/example/post/request
title: How to make api call
year: 2019
Run Code Online (Sandbox Code Playgroud)
可以使用哪个包装/功能?
我通过自制软件安装了蒸气,然后立即想通过执行跳入项目,vapor new Hello但是在终端中返回了以下消息:
dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /usr/local/bin/vapor
Reason: image not found
zsh: abort vapor new Hello
Run Code Online (Sandbox Code Playgroud)
我尝试了一些方法来解决此问题,例如通过brew卸载并重新安装openssl,但这没有用。还尝试了我在互联网上找到的东西,但是没有任何效果。我认为这仅与蒸气有关,而仅与1.0.0版一起使用,而与1.1.1版本无关,这就是我所拥有的。我想我需要降级到1.0.0,但是我该怎么做呢?如果重要的话,我在MacOS Catalina上。提前致谢。
我遵循了 Vapor 网站文档,创建了 hello 项目。 蒸汽文档
在hello项目路径下,swift build在终端输入。但是当打开 Package.swift 时,Xcode 再次开始获取蒸汽。
为什么?所有依赖项存储库都在.build路径中不是?为什么 Xcode 又开始重新获取 Vapor?
swift package generate-xcodeproj可以帮助生成 xcode 项目,似乎所有依赖项都不再打包了。只是团体。
打开 Package.swift & useswift package generate-xcodeproj然后打开生成的 xcodeproj 文件有什么区别?
用 Xcode 打开 Pacakge.swift,获取 Vapor 非常慢。有没有更好的方法?
就像告诉 Xcode 一切都在./build路径中一样。