我正在使用Vapor编写简单的网络应用程序。我有一个实体将会话信息保存到数据库中。这个实体的代码如下:为什么我的Vapor查询总是失败?
struct SessionToken: Model{
var exists: Bool = false
var id: Node?
var username: String
var accessToken: String
var expiryDate: String
init(username: String, accessToken: String, expiryDate: String) {
self.username = username
self.accessToken = accessToken
self.expiryDate = expiryDate
}
init(node: Node, in context: Context) throws {
try self.id = node.extract("id")
try self.username = node.extract("username")
try self.accessToken = node.extract("accessToken")
try self.expiryDate = node.extract("expiryDate")
}
func makeNode(context: Context) throws -> Node {
let sessionToken = try Node(node:["id": id, "username": username, "accessToken": accessToken, "expiryDate": expiryDate])
return sessionToken
}
static func prepare(_ database: Database) throws {
try database.create("sessiontokens"){ sessiontokens in
sessiontokens.id()
sessiontokens.string("username")
sessiontokens.string("accessToken")
sessiontokens.string("expiryDate")
}
}
static func revert(_ database: Database) throws {
try database.delete("sessiontokens")
}
}
我进入一些假信息到数据库中,但是当我查询用下面的代码数据库:
let token = try SessionToken.query().filter("username", "[email protected]").first()
我得到一个错误:Could not initialize SessionToken, skipping: unableToConvert(node: nil, expected: "String")
有趣的是,当我用工程中的任何其他实体替换SessionToken
时,代码工作得很好。我从数据库中获取任何信息的唯一实体是SessionToken
,自从昨晚以来,我一直感到沮丧!
我真的很感激,如果有人能指出我在正确的方向来解决这个问题。
P.S.我正在使用Postgres。