【问题标题】:Svelte custom store connecting to a database REDIS连接到数据库 REDIS 的 Svelte 自定义存储
【发布时间】:2020-08-10 01:46:33
【问题描述】:

我无法连接到 Svelte 应用程序内的 Redis 数据库。为此,我正在尝试制作一个自定义 store.js,但我已经在努力导入节点客户端(无论我使用什么客户端)。对于“ioredis”,文档说要像这样使用它:

const Redis = require("ioredis");
const redis = new Redis();

任何人都可以就如何实现它提出一些提示吗?这个想法是有一个应用程序,它的唯一目的是使用 pub/sub 方法解析/检索 REDIS db 的值。 我想我在汇总时遗漏了一些东西以及它在编译时处理 nodejs 依赖项的方式,或者根本不可能这样做?

【问题讨论】:

    标签: javascript redis svelte datastore ioredis


    【解决方案1】:

    商店需要能够在浏览器中运行,因此它们将无法直接与redis 通信或导入节点包(除非导入的包是同构的或具有等效的浏览器)。

    您可以创建一个包装 Redis 调用的 HTTP 服务器,而不是直接访问。

    存储是远程数据的副本。每次客户端更新 Redis(通过 HTTP 端点)时,它也应该更新本地存储。

    类似:

    export const store = writable(...)
    
    export async function updateRedis(stuff) {
      const response = await fetch('/my-update-url', {method: 'POST', body: JSON.stringify(stuff)})
      const result = await result.json()
    
      // tell the store about new results, either with set() or update()
      store.set(result)
    }
    

    【讨论】:

    • 啊哈,谢谢!如果我理解的话,我确实需要链浏览器->http-server->REDIS....
    • 没错!你需要在浏览器和 redis 之间建立一个 http 服务器(除非你正在做所有的渲染服务器端)
    • 嗯,对于所有组件如何协同工作仍然有些困惑。我有一个 Svelte 应用程序,它根本不需要与世界通信(只在我的 localhost 中运行,只是我的 localhost REDIS 数据库的图形用户界面)。这个 Svelte 应用程序,我在终端中启动,其中一个节点程序(Rollup 或 Webpack 或 Sirv-cli?)负责编译并将 bundle.js 直接发送到浏览器。不可能在该服务器中运行我的节点客户端(ioredis)(sirv-cli 是默认设置?)并且在我的数据库和我的应用程序之间不需要任何 fetch 或 html 层?
    • 这可能如你所说,通过“做所有渲染服务器端”?在那种情况下,有什么提示吗?
    • 您可以通过调用svelte.compile(source, {generate: "ssr"}) 在服务器端进行渲染。这将为您提供纤细组件的 HTML 作为字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2015-08-05
    • 2019-09-13
    • 2012-04-14
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多