首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的Vapor查询总是失败?

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

Stack Overflow用户
提问于 2017-04-26 01:45:36
回答 1查看 280关注 0票数 2

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

代码语言:javascript
复制
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")
    }

}

我在数据库中输入了一些假信息,但是当我使用以下代码查询数据库时:

代码语言:javascript
复制
let token = try SessionToken.query().filter("username", "user@email.com").first()

我收到一个错误:Could not initialize SessionToken, skipping: unableToConvert(node: nil, expected: "String")

有趣的是,当我用项目中的任何其他实体替换SessionToken时,代码工作得很好。唯一的实体,我有困难从数据库获取任何信息是SessionToken,它一直令我沮丧,从昨晚!

如果有人能为我指出解决这个问题的正确方向,我会非常感激的。

我在用Postgres。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-26 02:36:21

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

您可以在这里阅读更多关于Postgres大小写敏感性的内容:Are PostgreSQL column names case-sensitive?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43623646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档