问题标签 [ocsigen]

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 投票
1 回答
93 浏览

js-of-ocaml - 包装一个接收 JS 对象(记录)的 OCaml 函数

我想在 OCaml 中编写一个非常简单的函数,并将其包装成一个 JS 函数jsGetjs_of_ocaml这样就jsGet可以将 JS 对象(或记录)作为输入。

我尝试了以下代码:

wrap.ml

wrap.ml编译得很好,但是,运行Home.js返回undefined作为输出。

有谁知道如何纠正这个?

0 投票
1 回答
151 浏览

ocaml - 如何安装 Eliom

我无法安装 Ocsigen 项目的 eliom

但令人惊讶的是,我可以找到包含以下内容的包裹:

我做错了什么?

0 投票
1 回答
211 浏览

ocaml - ocsigenserver:不允许使用 80 端口

当我运行make run.byte我得到这个错误ocsigenserver: ocsigen:main: Fatal - You are not allowed to use port 80.。我试过sudo make run.byte了,但 sudo 不知道 opam 或 ocsigenserver。我曾尝试wwwuser在 Makefile.options 中使用,但无法使其正常工作。酒厂生成的 README 并没有提供太多信息,我在网上也找不到任何东西。

make test.byte工作得很好。

请问有什么想法吗?

编辑:看起来它与 eliom/ocaml 无关,非 root 用户无法在 Ubuntu 上低于 1024 的端口上运行任何东西。但是我仍然不明白为什么酿酒厂建议如果我的 wwwuser 是我,我可以做到这一点,我认为这不会有任何作用。我也不明白我应该如何运行sudo make run.byte,opam 安装在我的 ~ 目录中,sudo 找不到ocsigenserver。我可以通过以 root 身份运行所有内容来使其工作,但是每当我以opamroot 身份运行命令时,我都会收到you shouldn't use opam as root警告。我不认为这是我应该运行它的方式。有什么不对劲。

0 投票
1 回答
97 浏览

makefile - 如何在 Ocsigen 项目中排列源文件

我从基本模板创建了一个简单的 Ocsigen 项目。一切都很好,直到我决定将所有源文件放在src目录中并在其中创建更多子目录,以便我的源代码被划分为模块并很好地排列。

不幸的是,当我尝试编译项目时,只有主目录中的文件被编译,并且src没有在该目录中搜索源文件。我已经阅读了项目模板生成的makefile,并试图找出一种让它工作的方法,但没有成功。CLIENT_FILES具体来说,仅仅改变和SERVER_FILESin 的值是不够的Makefile.options。我试图像这样强加递归搜索:

但它没有用。Makefile显然需要更多的改变才能接受这一点。我也尝试过使用平面结构$(wildcard src/*.eliom),但这也不起作用。

那么有没有什么方法可以在不修改一半模板的情况下实现我所需要的Makefile,这对我来说相当神奇,难以修改,更难以完全理解和重写。

0 投票
1 回答
138 浏览

unit-testing - Eliom 框架中的单元测试

我正在使用 Eliom 构建一个新项目,并且在使用 OUnit 为单元测试设置编译过程时遇到了麻烦。

我有两个文件:

我以这种方式设置了文件,这样我就可以在 Js_Client_Code.eliom 上运行单元测试,而无需使用ocsigenserver.

这是我当前的测试生成文件:

make test在 shell 中运行会产生

我是否误解了 Eliom/Js_of_ocaml 编译过程,或者只是以错误的方式解决这个问题?

0 投票
1 回答
152 浏览

ocaml - 使用 ocsigen | 创建一个复选框 以利昂

我正在尝试在表单之外创建一个复选框,只是为了使用 Lwt_js_events.clicks 在其上绑定一个 JS 函数。

我试过使用 bool_checkbox_one,但我想不出一种方法来生成 ~name: 参数。我在这里发现了一些帖子,有人解释说你实际上不能,应该使用 raw_ 版本,但这似乎不再存在。我确实发现提到了一个 Html.D.Raw 模块,但我不知道它是如何工作的,而且文档在这方面已经过时了。

我尝试的另一件事是使用这个:

现在显然这不是很漂亮,但它确实有效,它确实生成了一个正确的复选框,可以很好地满足我的需求,但是当我在客户端上调用 Eliom_content.Html.To_dom.of_element 时,我得到了一个我可以使用的对象'不要调用##checked 来了解复选框是否被勾选(这在 bool_checkbox_one 上看起来是可能的)。我还尝试使用##hasAttribute 来尝试查看它是否已“选中”,但显然当我勾选复选框时它没有更新,不知道为什么。

无论如何,正确的方法是什么?谢谢

0 投票
1 回答
207 浏览

types - 双重强制何时有用?

我在 OCaml 中偶然发现了以下编译消息:

它发生在一个相当复杂的源代码中,但这里是一个 MNWE:

ocamlfind ocamlc -c -package eliom.server -thread test.ml您可以使用安装了 Eliom 6的 编译此示例。

错误发生在最后一行,OCaml 编译器抱怨f_link无法转换为 type tfull

有人可以向我解释为什么不能直接强制f_linktfull可以强制它tfull间接tphrasing用作中间步骤吗?

任何指向其背后的类型理论的指针也将受到欢迎。

0 投票
1 回答
127 浏览

ocaml - 创建 GET/POST 服务 Ocsigen

我正在使用 构建一个应用程序Ocsigen,此应用程序不会连接到数据库,目标是将内容从主网站复制到此处。(我正在使用 curl 来获取请求)

所以我的问题是,我正在尝试与用户进行“登录”,并且我想构建一个服务来保存我的代码usernamepassword用户引入的。然后我可以使用usernamepassword向主网站发出 GET 请求。

我的问题只有一个,我尝试了很多方法来构建一个保存这两个字符串的服务,但我想不出办法。

我做了很多不同的尝试,最后一次我做了类似以下的事情:

基于 Ocsigen 在他们的网站上的一个例子,但我不工作......

我创建了一个表单,它成功地执行了我创建的服务,但该服务从来没有做我需要的事情。

对不起,如果我解释得很糟糕......知道如何解决这个问题吗?我走错路了?

谢谢!

PS:我也尝试从 Ocsigen-Start src 文件夹中编辑 Os_services.connect_service ,我想我必须对这种情况进行 Post Service ,但我还是没有做我想做的事。

0 投票
1 回答
45 浏览

ocaml - 运行 `ocsigen` 给出链接错误:`dllssl_threads_stubs.so` image not found

我目前正在与一个奇怪的链接器问题作斗争ocsigenserver。它显然是在寻找与 ocaml 相关的 openssl 动态库。我已经完成了brew install openssl(最新版本)和opam install openssl. 但我仍然收到以下错误:

我不确定这里发生了什么。如果我这样做,openssl link我会得到

这对我来说意味着我可能需要强制 ocsigen 的构建包含这些标志,但我不确定我是否走在正确的轨道上。我觉得这必须表明eliom或者ssl必须安装不正确,但我刚刚opam reinstall编辑了它们。

0 投票
1 回答
103 浏览

ocaml - 如何编写显示 HTML 或重定向到另一个页面的服务

在 Web 编程中,表单提交的常见模式是:

  • 如果表单有效,则重定向到另一个页面(Post/Redirect/Get)。
  • 如果表单无效,请重新显示表单(这次可能包括错误消息)。

我如何在 Ocsigen 中表达这一点?

我一直在阅读文档,但无法弄清楚如何完成这个简单(而且非常常见)的任务。

示例用例:

假设我有一个登录表单,可以防止未经授权访问管理面板(该页面只能由管理员访问)。如果用户在登录表单中提供了正确的凭据,则应将用户重定向到管理面板。如果凭据不正确,则应将用户重定向回登录表单。到目前为止,我已经成功实现了这个功能。

但是,在实现以下内容时我不知所措:如果用户已经登录并尝试访问登录表单,则应将用户重定向到管理面板。此外,如果用户未登录并尝试访问管理面板,则应将用户重定向到登录表单。

下面是我卡住的地方的代码:

解决这个问题的正确方法是什么?

谢谢你。