问题标签 [http-kit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
149 浏览

websocket - Clojure:如何验证 Web 套接字用户?

我一直在关注http-kit websockets 示例,后来在试图找到一种将 WS 通道映射到后端用户的惯用方法时陷入困境。

我尝试使用 Java 反射检查 org.httpkit.server.AsyncChannel 对象并获得以下属性:

它似乎不包含任何明确的标识符,包括.toString

我能想到的唯一想法是:

1)保持connect!功能不变:

2) 更新 WebSocket 客户端以在建立 WS 连接后立即发送 JWT 或环会话 ID 作为第一条消息,该连接允许将该(已经建立的)通道映射到可以识别用户的标识符(JWT 或环会话 ID)。

这有意义吗?或者它是一个大的反模式和对 WS RFC 的违反?抱歉,我之前没有在这么低的级别上使用过 WebSockets。

0 投票
2 回答
186 浏览

git - 如何在 Clojure 的 URL 路由中嵌入当前的 git sha

通常,我的所有服务器端应用程序都有一个 URL GET 路由,它返回当前的 git 哈希,作为检查给定实例上运行的代码的确切版本的简单方法。在解释型语言(例如 Python、Node.js)中,这很容易,您只需检查在子进程中运行 shell 命令的输出。但是我通过使用lein uberjar.

所以我可以clojure.java.shell像这样以编程方式获取当前的 git sha:

但是我需要一种方法在 uberjar 过程中(而不是在运行时当 jar 不再在 repo 中时)将其嵌入代码中,以便从我使用 compojure 定义并通过 http-kit 提供的 URL 路由返回。如何在编译时或构建时运行该函数并将其转储到常量或其他我可以从路由返回的东西?

虽然我想要一个沿着这些思路的解决方案,正如所说的,这里的最终游戏是能够通过 HTTP 查询正在运行的实例并找到运行的代码的确切版本(强烈喜欢 git sha 而不是例如 semver 编号)生产中的给定实例。

我意识到我可以通过将 repo 克隆到所有实例并通过例如 ansible 在本地构建 jar 并在已知目录中查找 sha 来解决这个问题,但这看起来,嗯,hacky,以及容易出错 vs “签名” jar 文件可以说是在构建时。

编辑:

我的 project.clj 看起来像这样:

0 投票
1 回答
154 浏览

clojure - 如何在 Clojure 中使用 http-kit 发送 api-key 作为授权?

我需要http-kit在 Clojure 中使用 API-Key 作为授权进行 API 调用。也就是说,在 Postman 中,您通常可以选择添加api-keyapi-value以及将其添加到header或的选项query-params

我知道以下将是在以下情况下的方法basic-auth

但是类似的变体不适用于api-key版本。到目前为止,我已经尝试过:

和其他变体,但它似乎不起作用。

(注意:授权适用于邮递员,但我无法在那里测试完整的 api 调用,因为正文太长且太复杂而无法复制,并且授权在应用程序中不起作用。)

0 投票
1 回答
60 浏览

clojure - 如何在 Compojure 视图中调用已解析的函数?

我有以下代码作为测试:

正如我所期望的那样运行This is a test

所以我把它放在一个单独的视图中,如下所示:

像这样从 Compojure 调用它:

当我调用 https//mydomain.tld/foo 时,我得到一个 java.lang.NullPointerException:

在 Compojure 中无法再调用此函数是怎么回事?

0 投票
1 回答
100 浏览

clojure - 如何简化 Compojure 路由?

我有以下代码在 Compojure 中定义我的路线:

那行得通,但似乎我应该能够像这样简化它:

但是,当我这样做时,我得到了这个错误回溯:

在这里使用有什么(map)问题吗?