如何使用 Ajax 从单页 ClojureScript / React.js 应用程序连接到 MongoDB?
How to connect to MongoDB from a single page ClojureScript / React.js application using Ajax?
考虑一个使用试剂的 ClojureScript Web 应用程序,其中试剂组件订阅了包含映射向量的单个 db 原子。该向量的内容对于每个用户都是不同的,必须从 mongo 数据库(定期更新)中查询。该数据库可能由第三方托管。考虑到 CongoMongo、Karras 和 Monger 是 Clojure(不是 ClojureScript)库,使用 Ajax?[=13= 从单个页面 ClojureScript/React.js 连接到 MongoDB 的最佳方式是什么? ]
您可以使用 sente 在 Reagent 应用程序和您的网络服务器之间进行通信。此 引用了一个示例 client/server 应用程序,该应用程序由具有浏览器访问权限的 Web 服务器组成,为您提供了一些按钮来按下来自服务器的 return 信息。它不是试剂 - 但您可以用他们使用的替代品。这是一个开箱即用的起点示例。
然后构建示例的 Web 服务器,以便它与三个 Clojure 库通信,而不是像它那样 returning 静态文本。
由于 Mongo 有一个相当简单的 REST 接口 (https://docs.mongodb.org/ecosystem/tools/http-interfaces/#simple-rest-api),我很想编写自己的调用 Mongo 服务器的 CLJS 代码。取决于您的安全要求。但是编写 CLJS 代码与任何其他远程请求没有什么不同。只是一些字符串连接和参数序列化。
这个“答案”更像是一个评论,但这里是。
如果您不是绝对需要 Clojure 后端,我建议您使用仅 ClojureScript 的单页应用程序,而不使用任何 Clojure 包装器 Mongo(因此也不需要 Sente)。正如 Timothy Baldridge(来自 Cognitect,因此他对此略知一二)指出的那样,您的 ClojureScript 应用程序可以向数据库发出 HTTP REST 请求。
cljs-http 是一个 ClojureScript 项目,它使用 Clojure 的 core.async
库来发出 HTTP 请求,如果您知道或可以学习 core.async
.[=16,它非常适合与 REST API 交互=]
一种更传统的(即回调)方法,但仍然对 ClojureScript 非常友好,是使用 Google Closure 的 goog.net.XhrIo library. I have an example here of connecting to a public REST API using XhrIo and re-frame(建立在 reagent 之上,强烈推荐)可能会有所帮助显示如何开始。
使用这些 ClojureScript/JS 库中的任何一个,您可以直接从 ClojureScript 浏览器应用程序向数据库发出请求、获取回复、使用 (js->clj (js/JSON.parse json-string))
或 [= 解析 JSON 15=],并对结果做一些处理。
考虑一个使用试剂的 ClojureScript Web 应用程序,其中试剂组件订阅了包含映射向量的单个 db 原子。该向量的内容对于每个用户都是不同的,必须从 mongo 数据库(定期更新)中查询。该数据库可能由第三方托管。考虑到 CongoMongo、Karras 和 Monger 是 Clojure(不是 ClojureScript)库,使用 Ajax?[=13= 从单个页面 ClojureScript/React.js 连接到 MongoDB 的最佳方式是什么? ]
您可以使用 sente 在 Reagent 应用程序和您的网络服务器之间进行通信。此
然后构建示例的 Web 服务器,以便它与三个 Clojure 库通信,而不是像它那样 returning 静态文本。
由于 Mongo 有一个相当简单的 REST 接口 (https://docs.mongodb.org/ecosystem/tools/http-interfaces/#simple-rest-api),我很想编写自己的调用 Mongo 服务器的 CLJS 代码。取决于您的安全要求。但是编写 CLJS 代码与任何其他远程请求没有什么不同。只是一些字符串连接和参数序列化。
这个“答案”更像是一个评论,但这里是。
如果您不是绝对需要 Clojure 后端,我建议您使用仅 ClojureScript 的单页应用程序,而不使用任何 Clojure 包装器 Mongo(因此也不需要 Sente)。正如 Timothy Baldridge(来自 Cognitect,因此他对此略知一二)指出的那样,您的 ClojureScript 应用程序可以向数据库发出 HTTP REST 请求。
cljs-http 是一个 ClojureScript 项目,它使用 Clojure 的 core.async
库来发出 HTTP 请求,如果您知道或可以学习 core.async
.[=16,它非常适合与 REST API 交互=]
一种更传统的(即回调)方法,但仍然对 ClojureScript 非常友好,是使用 Google Closure 的 goog.net.XhrIo library. I have an example here of connecting to a public REST API using XhrIo and re-frame(建立在 reagent 之上,强烈推荐)可能会有所帮助显示如何开始。
使用这些 ClojureScript/JS 库中的任何一个,您可以直接从 ClojureScript 浏览器应用程序向数据库发出请求、获取回复、使用 (js->clj (js/JSON.parse json-string))
或 [= 解析 JSON 15=],并对结果做一些处理。