Ios 为什么我的Vapor查询总是失败?

Ios 为什么我的Vapor查询总是失败?,ios,swift,postgresql,vapor,Ios,Swift,Postgresql,Vapor,我正在使用Vapor编写一个简单的web应用程序。我有一个实体将会话信息保存到数据库中。该实体的代码如下所示: struct SessionToken: Model{ var exists: Bool = false var id: Node? var username: String var accessToken: String var expiryDate: String init(username: String, accessToken

我正在使用Vapor编写一个简单的web应用程序。我有一个实体将会话信息保存到数据库中。该实体的代码如下所示:

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", "user@email.com").first()
我收到一个错误:
无法初始化SessionToken,跳过:unableToConvert(节点:nil,应为:“字符串”)

有趣的是,当我用项目中的任何其他实体替换
SessionToken
时,代码工作正常。从数据库中获取任何信息时遇到问题的唯一实体是
SessionToken
,它从昨晚起就一直让我很沮丧

如果有人能为我指出解决这个问题的正确方向,我将不胜感激


另外,我正在使用Postgres。

我找到了问题的根源。如错误所述,
无法初始化SessionToken
实体初始化有问题。Postgres使用所有小写字母创建列名,因此如果您创建一个“accessToken”列,它将保存为表中的“accessToken”,不带大写字母T。正如您所看到的,我正在使用“accessToken”查询表,但不存在这样的列;因此,问题的根源是表和查询之间的命名差异

您可以在此处阅读有关Postgres区分大小写的更多信息: