在数据库中创建新数据后更新 URLSession

Posted

技术标签:

【中文标题】在数据库中创建新数据后更新 URLSession【英文标题】:Update URLSession after new data is created inside database 【发布时间】:2020-07-14 07:40:54 【问题描述】:

我正在使用以下内容:

阿波罗 ios

Neo4j 数据库(带有 GraphQL 插件)

GraphQL


用于连接的单例类

我下面的代码是连接到恰好是我的 Neo4j 数据库的 GraphQL 端点。

class Network 
    static let shared = Network()
    private(set) lazy var apollo: ApolloClient = 

        let url = URL(string: "http://localhost:7474/graphql/")!
        let keychain = KeychainSwift()
        let configuration = URLSessionConfiguration.ephemeral

        configuration.httpAdditionalHeaders = ["Authorization": "\(String(describing: keychain.get("neo.auth")))"]

        return ApolloClient(
            networkTransport: HTTPNetworkTransport(url: url, session: URLSession(configuration: configuration))
        )
    ()


当我通过我的应用程序在我的数据库中创建数据时,这很有效,但是如果我随后查询数据库以返回所有数据,则找不到新创建的数据。数据在数据库中,因为我可以在浏览器中看到它,如果我重新启动我的应用程序然后运行完全相同的代码来返回所有数据;它返回它。

我尝试做的另一件事是在模拟器中并排运行我的应用程序的两个实例。这两个应用程序具有相同的功能,并且可以导入/导出数据。当我通过一个实例创建新数据时,数据在数据库中成功创建,但是在应用程序的另一个实例中导入数据时 - 它什么也不返回(两个应用程序同时运行)。

我的导入代码

    func importData()
    let apollo = Network.shared.apollo
    //Import all data from the graph database
    apollo.fetch(query: GetAllQuery())  result in
    guard let data = try? result.get().data else  return 
        print(data.jsonObject.values)
    

我唯一能想到的是在数据库中创建新数据时会话没有更新。我觉得这是因为如果我重新启动应用程序并运行我的导入功能,它实际上会返回所有新数据。我需要在创建新数据时更新连接,有没有办法在创建数据时刷新连接?

【问题讨论】:

【参考方案1】:

我找到了一个到目前为止对我有用的修复:

apollo.clearCache()

我在对数据库运行查询之前使用它,到目前为止它已经提取了所有正确的数据。我的问题是,当我将数据导出到数据库然后尝试直接导入(或读取)它从未返回任何内容或返回系统中已经存在的数据之后。

【讨论】:

以上是关于在数据库中创建新数据后更新 URLSession的主要内容,如果未能解决你的问题,请参考以下文章

为啥在其中创建新文件时目录的更改时间(ctime)会更改?

sh 在Docker中创建新数据库

Prisma 在 MongoDB 中创建新数据库

在laravel中创建新数据时无法按类别保存计算数据

如何避免在数据库中创建新列

即使未加载 codeigniter 会话库,也会在数据库中创建新的会话条目。为啥?