我将此作为示例解决方案发布,我并不是说您应该这样做。然而,我确实经历了一些“陷阱”,所以我
认为值得记录。
感谢您的回答。在做我知道我必须做的事情之前,我只是想找出是否有更简单的方法。我决定使用服务器端写入。
我正在使用苹果酒、栗子和与 chrome 客户端连接的 brepl 服务器。由于我不熟悉环形服务器、compojure 和嵌入式码头服务器,我不知道如何向 brepl 服务器(端口 10555)添加 Web 服务。相反,我向我的本地 apache 服务器添加了一个。
因为请求是从码头服务器(而不是从浏览器)进入 apache,所以我遇到了“跨源资源共享”问题,即消息:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
每当我向我的服务 URL 提交请求时。
我能够通过将以下内容添加到我的 http 标头来解决此问题:
-access_control_allow_credentials => 'true',
-access_control_allow_origin => 'http://localhost:10555',
这是唯一的问题。除此之外,它是一个标准的 cgi 解决方案(是的,老派——我来自 perl 背景)。是的,我知道如果我能在 clojure(或 Rails)中完成它会是最好的。
我的 cgi 最终看起来像这样:
#!/usr/bin/perl
use CGI qw(:standard);
print header(
-type => 'text/html',
-access_control_allow_credentials => 'true',
-access_control_allow_origin => 'http://localhost:10555',
);
my $q = CGI->new();
my $src = $q->param('src');
# write to file
open(my $fh, ">>", "vt-src-out.txt")
or die "cannot open < vt-src-out.txt: $!";
print $fh "$src\n";
我使用 ajax.core 作为我的客户端 api:
:require [ajax.core :refer [GET POST]]
并像这样调用服务:
(GET "http://localhost/cgi-bin/cljs-write-src.cgi" {:params {:src "(defn foo [])(+ 1 1)"}})