我从这个问题开始,因为焦点已经改变。
我正在尝试通过 websocket 从蒸气服务器发送字符串数据。客户端是主要问题所在。此代码成功接收字符串,该字符串预期为 JSON(但不能绝对保证——超出范围)。
switch message {
case .data(let data):
print("data: \(data)")
case .string(let str):
// let data = str.message(using: .utf8)
let jsonData = Data(str.utf8)
print("string: \(jsonData)")
do {
struct Person : Codable {
var name: String
}
let decoder = JSONDecoder()
let people = try decoder.decode([Person].self, from: jsonData)
print("result: \(people)")
} catch {
print(error.localizedDescription)
}
}
Run Code Online (Sandbox Code Playgroud)
经过一些非常有用的指导,发送一个字符串,例如"{\"name\": \"Bobberoo\"}"将打印出来
string: 20 bytes
The data couldn’t be read because it isn’t in the correct format.
Run Code Online (Sandbox Code Playgroud)
如果我用大括号把它包起来 …
我按照Vapor 教程创建了一个 hello 应用程序。在 Xcode 中,当我在 Mac 上运行“运行”方案时,应用程序将启动并运行,正如我通过打开 http://localhost:8080/ 看到的那样。对代码进行一些更改后,我停止运行方案,并希望 Vapor 服务器关闭。但是,它会继续处理请求。
Message from debugger: The LLDB RPC server has exited unexpectedly. Please file a bug if you have reproducible steps.
Program ended with exit code: -1
Run Code Online (Sandbox Code Playgroud)
显然,当我进行一些更改并再次运行运行方案时,我收到以下运行时错误:
Swift/ErrorType.swift:200: Fatal error: Error raised at top level: bind(descriptor:ptr:bytes:) failed: Address already in use (errno: 48)
Program ended with exit code: 9
Run Code Online (Sandbox Code Playgroud)
如何停止或重新启动服务器?
我有一个使用 Vapor Fluent PostgreSQL 构建的已部署后端。
现在我需要new_field 向数据库中具有架构名称的表添加一个新的必需字段键schema_name 。我创建了一个新的迁移:
struct AddNewFieldToSchema: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
database.schema("schema_name")
.field("new_field", .string, .required)
.update()
}
func revert(on database: Database) -> EventLoopFuture<Void> {
database.schema("schema_name")
.deleteField("new_field")
.update()
}
}
Run Code Online (Sandbox Code Playgroud)
但运行后,它给我错误:
Fatal error: Error raised at top level: server: column "new_field" of relation "schema_name" contains null values (ATRewriteTable)
Run Code Online (Sandbox Code Playgroud)
我猜测这是因为使用旧数据模型创建的现有数据没有 的值new_field,因为如果数据库为空,这个新迁移运行正常。
我该如何解决这个问题?谢谢。
我只是新手,想要了解更多有关服务器端swift with vapor的信息,现在我真的在使用steam swift动态地叠加在show image上.在我的情况下.我有文件夹上的图像:
public - > images - > a.png,b.png
我在我的数据库上有图像名称,我想在叶子文件上获取显示图像的请求,我的图像的参数名称,如何实现它.非常感谢.
我目前正在关注Swift Vapor的简短介绍,在他们的网站上关注他们的"Hello World"教程.但是,当我尝试构建显示以下内容的项目时,我不断收到来自swift-package的错误.
$ vapor build
No .build folder, fetch may take a while...
Fetching Dependencies [Failed]
Error: swift-package: error: unknown command: --enable-prefetching
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到如何在线解决这个问题.有人有什么想法吗?
当我尝试使用Xcode 9编译新创建的vapor项目时,出现189个编译错误。进行这项工作的诀窍是什么?我安装了vapor和工具箱,并通过“ vapor new test --template = api”创建,然后通过“ vapor xcode”启动它。
我目前正在使用Vapor开发Swift后端。我的iOS客户端使用新的iOS 13功能“使用Apple登录”。当用户登录时,我得到一个身份令牌(访问令牌),它是Apple签名的有效JWT令牌。这将在所有正在进行的通信中发送到服务器,以验证服务器提供的某些路由。
在服务器上,我想验证发送的令牌确实由Apple签名,并且不是某些恶意用户通过验证令牌签名专门制作的。Apple提供了一个HTTP端点来检索执行此操作的公共密钥:Apple文档。
但是,我不确定必须多久查询一次此端点以从API检索模数和指数并构建公钥,然后验证签名。是否足以查询一次并在服务器上存储公用密钥以使用它,还是我需要在验证签名(针对每个受保护的路由)之前查询中间件中的HTTP端点?
基本上我不确定模数和指数是否会不时变化。
我想在 Vapor 4 中建立aLeague和 a之间的父子关系。Team我可以创建一个League就好了,但是当我尝试创建一个这样的新团队时:
{
"name": "Chicago Bulls",
"league_id": "C21827C2-8FAD-4A89-B8D3-A3E62E421258"
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
{
"error": true,
"reason": "Value of type 'League' required for key 'league'."
}
Run Code Online (Sandbox Code Playgroud)
我只想Team用从表league_id中引用 a 的 a初始化 a 。我在 Vapor 3 中使用过这个,但在 Vapor 4 中似乎无法正确使用。LeagueLeagues
请参阅下面的模型和迁移。
League 模型:
final class League: Model, Content {
init() {}
static let schema = "Leagues"
@ID(key: .id) var id: UUID?
@Field(key: .name) var name: String
@Field(key: .sport) var sport: …Run Code Online (Sandbox Code Playgroud) 我在如何通过包含额外字段的数据透视表返回包含多对多关系的模型方面遇到了很多困难。基本上,我想返回带有额外字段的完整数据透视表,但我不知道如何执行此操作。
让我们考虑以下 3 个模型:Course、User,以及它们之间的枢轴 a Student。该Student模型包含额外的字段progress。
final class Course: Model, Content {
static let schema = "courses"
@ID(key: .id)
var id: UUID?
@Field(key: "name")
var name: String
init() { }
}
final class Student: Model {
static let schema = "students"
@ID(key: .id)
var id: UUID?
@Parent(key: "course_id")
var course: Course
@Parent(key: "user_id")
var user: User
@Field(key: "progress")
var progress: Int
init() { }
}
final class User: Model, Content { …Run Code Online (Sandbox Code Playgroud) 我第一次下载了蒸汽,我得到了蒸汽4,不幸的是,我所有的教程都是建立在蒸汽3上的,如何降级蒸汽版本?
当我在Vapor中运行用Swift编写的查询时,我注意到Fluent的性能很差。当我以这种方式运行原始查询时:
SELECT * FROM "Model"
Run Code Online (Sandbox Code Playgroud)
响应时间约为20-30毫秒。如果我以这种方式运行查询:
Model.query(on: request).all()
Run Code Online (Sandbox Code Playgroud)
响应时间增加了十倍。为什么?有什么问题?
相比2.0,完美,或像Django这样的Python franeworks.如果可用于小规模项目以外的任何事情