- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个简单的 Node JS 应用程序,它提供 API。我可以 node main.js
来运行服务器,并调用 localhost:3000/api/names
来成功获取名称列表。我想在此基础上使用 Reagent/Cljs。
我可以在 localhost:3030
上运行一个 Reagent 应用程序。我的问题是,如何从 Reagent 应用程序对 Node 应用程序进行 API 调用?或者我的架构全错了?我应该合并这两个应用程序吗?如果是,该怎么做?
我尝试过将它们组合起来,但 Reagent 希望在 Ring 上运行,而 Node 应用程序希望在 Node 服务器上运行。所以两人之间至今还没有任何交流。我尝试过 the Quick Start指南,但这并不是完全相同的情况。我还给了this approach一去无果。将这些部分组合在一起以便我可以将 API 响应数据从 Node 应用程序带到 Reagent 应用程序的最简单方法是什么?或者有没有办法从我缺少的试剂应用程序中进行 API 调用?
最佳答案
是的,您需要在浏览器中运行的代码和服务器上运行的代码之间进行通信。
基本方法是使用 XHR。客户端应该做这样的事情:
(ns foo
(:require [goog.net.XhrIo :as xhr]))
(xhr/send "/api/names"
(fn [e]
(prn (.. e -target getResponseText))))
或者还有一个使用非常广泛的库 cljs-http
(ns foo
(:require
[cljs.core.async :refer [<!]]
[cljs-http.client :as http])
(:require-macros
[cljs.core.async.macros :refer [go]]))
(go (let [response (<! (http/get "data.edn"))]
(prn (:status response))
(prn (:body response))))
它使用 core.async 通过 channel 将结果返回给您。不过,您实际上不需要关心它来使用它,除了要注意 go
block 中的事情将在“稍后”发生。
对于高级用法,您可以使用 sente 创建 websockets
网页的一个重要考虑因素是它们只能在为页面提供服务的同一端口上的同一主机上执行 XHR。因此,如果您将 API 托管在 localhost:3030,则必须从 localhost:3030 提供该页面,以便您能够与其通信。 (这称为同源策略)。
您在问题中指出,您的 API 位于端口 3000 上,而 Reagent 应用程序由 3030 提供服务。由于同源策略,这将不起作用。有一个名为 CORS 跨源资源共享的标准,从技术上讲您可以使用该标准,但实际上不要这样做。相反,从与 API 相同的服务器提供 HTML/Javascript。
这对您来说意味着您需要确保在构建 Reagent 应用程序时,包含最终 JavaScript 的 HTML 页面需要由为您的 API 提供服务的同一台服务器提供服务。通常,这是将 HTML 和 JavaScript 放入服务器上的资源文件夹中的问题。
关于node.js - 如何将 Reagent 添加到 Node JS API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35242524/
我不明白以下代码中的标记“:<>” clojure re-frame todomvc (defn todo-app [] [:<> [:section#todoapp [task
我最近为我的 clojurescript 项目使用了试剂和重新框架,但我遇到了一个问题: 所以我有 html 自定义标签 我想使用 cljs 将它们交换到我的试剂生成的 html 中作为函数 (d
有没有一种简单的方法可以从 ClojureScript Reagent 应用程序更改文档标题和描述(或其他 [:html [:head [:meta 标签)?例如,在每个 bidi 路由匹配上更改标题
我不确定解决这个问题的最佳方法: 我正在编写一个 Web 应用程序,它为许多“项目”对象实现基本的 CRUD 功能。因此,用户可以创建他/她自己的一组项目。 我编写了一个用于添加/删除/列出项目的 R
我正在尝试在 reagent/cljs 应用程序中显示一组单选按钮。我从 http://yogthos.github.io/reagent-forms-example.html 遵循了相同的过程但我显
我刚刚尝试在 clojurescript 中创建一个使用 react-table 的元素。我像那样导入 react 表 (:require [react-table :as rt :default R
我在使用 clojurescript/试剂让我的 table 体正确排列时遇到问题。我实际上不确定这是我不了解在 html 中做什么还是什么... 目前我使用循环显示表体 (defn table-bo
我正在尝试使用 http://react-components.com 中的组件(例如 react-youtube )在基于试剂的应用程序中,但我的幼稚方法可能不是正确的方法。我尝试使用 lein-n
我正在尝试使用 Reagent 和 React-Pixi 在 Clojurescript 中构建游戏,但只要我尝试做任何事情,我就会得到: Error: Invariant Violation: PI
在试剂中,可以像这样指定内联 CSS 样式: [:div {:style {:border "1px solid red"}} "My Text"] 花园可以使包含列表中多个值的此类 CSS 属性更加
我经常发现自己在使用 Reagent 应用程序时会做这样的事情。 (defn create-account [user-details error-ref] (let [validation-er
这是来自试剂docs . (defn mountit [] (r/render-component [childcaller] (.-body js/d
我在使用 Material UI 时遇到问题 Autocomplete与试剂(ClojureScript)。该元素呈现良好,但是当我尝试单击它时,出现以下异常: Uncaught TypeError:
我想了解输入字段在 Reagent 中的工作原理。 我首先尝试将 on-change 绑定(bind)到一个更改底层原子的简单函数: (defonce app-state (reagent/ato
我正在尝试在我的网页中嵌入 CodeMirror 来编辑多个代码片段,一次一个。 为此,我: 拥有一个包含代码片段图的试剂原子 node-defs-atom。 有另一个原子node-history-a
我正在编写一个 Clojurescript 应用程序,使用 Reagent 使我的组件具有反应性。 我有一个简单的问题。我应该吗 将我的原子作为输入传递给我的组件,或者 使用原子作为全局变量并让它们“
是否可以包装ReactJS组件以与Reagent一起使用在 Clojurescript 中?我有read这是。有人可以给我提供一个基本的例子吗? 谢谢 最佳答案 这是我的解决方案(我将使用 React
我可以使用 Javascript 版本的 React this.props 但是我可以用什么来给 Prop :reagent-render 回调? I am trying to do as d
我有一个项目,前端堆栈必须基于 ClojureScript 和 React(通过 Reagent,而不是 Om 或其他库)。 此外,我还有大量来自设计师的 HTML 模板(作为 .html 文件),他
我有时发现使用 React 的 Refs 很有用。为了更改 DOM 的状态,例如在渲染组件后聚焦输入字段。 Reagent 或 Om 是否实现了这一点,如果没有,在这些库中执行此操作的惯用方法是什么?
我是一名优秀的程序员,十分优秀!