问题标签 [restxq]

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 投票
2 回答
311 浏览

rest - 存在-db restxq 触发器:服务已删除但仍处于活动状态

我对存在数据库中的 RESTXQ 实现有疑问。我认为可能是 RestXQTrigger 工作不正常。

.xqm问题:我(通过仪表板)删除了一个集合,其中包括几个文件中的 RESTXQ 服务。但是,这些服务并未取消注册并且仍然可用,即使在重新启动 eXist 之后也是如此。

有什么方法可以强制取消注册,我的意思是除了重新创建以前的集合/文件并逐个删除每个.xqm文件(这样,触发器似乎工作)?

0 投票
1 回答
88 浏览

linux - Too many files open with a RestXQ service

I have a eXist 2.1 (version eXist-db-setup-2.1-rev18721) installed on a Debian server, on which a very simple RestXQ service is set:

When i call a script that use it, there's no problem.

But then I tried to build a script that would call the service like 2 000 times (in short, I want to put 2 000 different files in the database, each one being rather small, like 100 lines).

If I launch it once, no problem; if I try a second time, then I get some error after some time, and then have some issue with the dashboard (not responding at all), but the xmlrpc client and the rest access still work, until I restart eXist.

In the restxq.log, I saw this:

Caused by: java.io.FileNotFoundException: /tmp/_mmtfm_c1600dd8-7203-442c-986b-90328917d6b5/mmtf_1418203231259112417444648192085.tmp (too many files open).

So I check for the pid of eXist in the linux system, and with lsof, I see that the eXist process uses more than 4 000 files. after multiple experiments, 4324 (or 4325) seems to be the limit where something goes wrong.

If I restart eXist, the process uses like 450 files; and each time I want to call the web service, a file (and a folder) is created in exist/tools/jetty/tmp/, and then used by the process.

Has anyone been in front of this problem ? Why aren't those file released once the PUT done ?

Thanks, and happy new years ^^

0 投票
2 回答
231 浏览

jsonp - 如何在 RestXQ 中返回 JSONP(使用 eXist-db)?

我不知道如何在 RestXQ 中返回 JSONP。添加 let $x := util:declare-option("exist:serialize", fn:concat("method=json jsonp=",request:get-parameter("callback", "callback"))) 到函数后,我收到错误消息:

err:XPTY0004:如果在静态分析阶段发现表达式具有不适合表达式出现的上下文的静态类型,或者在动态求值阶段发现表达式的动态类型不合适,则属于类型错误值与 2.5.4 序列类型匹配中的匹配规则指定的所需类型不匹配。

GET 函数的开头是:

0 投票
1 回答
248 浏览

same-origin-policy - 有没有办法让 BaseX 提供 HTML 文档?

有没有办法让 BaseX 的 HTTP 服务器为存储在数据库中作为原始资源或文件系统中的 HTML 文档提供文本/html 内容类型,以便可以在浏览器中显示?

该文档是一个向 BaseX 发出 XHR 请求的网页。目前,我通过文件协议将它加载到浏览器上。这需要让 Jetty 使用 CORS 标头进行响应,否则同源策略会阻止 XHR 请求。

然而,这是一个维护负担。BaseX 的每次更新都需要手动获取添加 CORS 标头的新版本的 servlet 过滤器。

我想让 BaseX 本身为 HTML 文档提供服务(并成为源),从而消除跨源请求。

是否可以?

0 投票
2 回答
385 浏览

exist-db - 如何在 eXist-db 中注册 RESTXQ 模块?

我正在尝试在我的存在数据库应用程序中使用 RESTXQ - 我们称之为“超级应用程序”。我将restxq触发器添加到/db/apps/superapp/collection.xconf:

然后我在文件夹 /db/apps/superapp/modules 中添加了一个文件“restxq-test.xql”:

但是我如何让restxq“知道”这个新模块的存在呢?它显然不会自动这样做。如果我打电话给“xyz.com:8080/exist/restxq/super?user=John”,我会得到

我重新启动了 eXist 并检查了 /var/www/exist/webapp/WEB-INF/logs/restxq.log 但那里没有条目......我很确定函数和属性映射是正确的。如果我将相同的功能添加到“/db/apps/demo/examples/templating/restxq-demo.xql”(显然已注册),它就完美了。所以我猜新模块只是没有注册。我怎样才能做到这一点?

0 投票
2 回答
545 浏览

authentication - 如何在 RESTXQ 中验证存在数据库用户

(完全改写 - 因为没有答案): 我正在开发一个带有用户身份验证和 RESTXQ 的存在数据库应用程序。我的用户通过登录模块中的 login:set-user 功能登录。这是控制器的一个片段:

这工作得很好。如果我在 app:function() 中的任何位置调用例如 xmldb:get-current-user() 我会得到当前登录的用户名。

我还有一个 RESTXQ 模块,其中有几个函数可以通过 AJAX 请求通过 URL 动态调用。其中一些操作(删除数据中的 xml 元素,添加新集合...)相当关键。我不希望客人(或具有错误权限的用户)能够只调用这些 RESTXQ URL 来操作数据 - 所以 RESTXQ 必须是安全的,它应该仔细检查:当前登录的用户是否允许修改特定资源/收藏?

如果我在任何 RESTXQ 函数中调用例如 xmldb:get-current-user(),我总是得到“guest”,所有安全管理器 (sm) 函数也表明在 RESTXQ 中不知道当前用户登录。仅当我在每个 RESTXQ 函数中执行 xmldb:login("/db","username","password") 之类的操作时,RESTXQ 似乎知道有人已登录,但用户名和密码不应不断地通过来回传递URL - 但是如果不传入这些数据,RESTXQ 函数似乎并不知道它(对吗?)。

那么我如何确保,RESTXQ 只允许经过身份验证的用户更改数据(用户不必多次进行身份验证,也不必在每次请求时将身份验证数据传递给 RESTXQ)?

示例用例:我想要一个 RESTXQ 函数,它获取搜索字符串 ($text) 和集合路径 ($path) 作为输入,现在它检查 $path 中的所有 xml 文件:如果当前登录-用户(必须经过身份验证!)对文件具有写入权限,删除所有包含 $text 的节点并向用户返回一些 JSON 响应...

我有多个这样的功能,(移动,删除和添加数据,添加新集合......),它们工作得很好,除了粗体部分:我不明白这个如果在。有什么想法吗?

PS:eXist 邮件列表上的这个主题 提出了同样的问题。这里@adamretter 建议限制 RESTXQ 模块文件本身,因此在调用函数时会提示用户(重新)进行身份验证 - 即使他们已经使用了持久登录。这是我不喜欢的:

  1. 我不希望我的用户必须多次登录(这是让事情尽可能动态的想法 - 例如通过使用 RESTXQ)
  2. 提示登录(用于执行 RESTXQ)和之前通过登录模块的登录(持久)现在可以不同了!
  3. 即使用户在应用程序中注销,RESTXQ 仍然被授予访问权限,因为提示的身份验证对注销一无所知。如果一个新用户登录(不是在提示中,而是通过登录模块),她仍然可以访问 RESTXQ,因为这不是重新提示(而且我不知道如何“注销”这个提示,看似平行的第二个登录)。
  4. 我可以通过这种方式限制整个 RESTXQ 模块,但我仍然不知道如何在 RESTXQ 函数中询问:“当前用户对资源 A、B、C 有什么访问权限...
0 投票
1 回答
205 浏览

post - RestXQ [XPTY0004] 无法将空序列()转换为文档节点()

我有一个 RestXQ 方法:

我试图通过 XForms 向这个方法发送一个 POST 请求。作为对客户端的响应,[XPTY0004] Cannot convert empty-sequence() to document-node(): ().我尝试删除document-node()但参数 $name 只是空的。

请求参数如下所示:

有什么解决办法吗?

0 投票
0 回答
39 浏览

exist-db - 存在数据库多个请求(发布,放置)在 restxq 上失败

我在 restxq 多个并行的 post 请求上遇到问题,put。当来自 Web 应用程序的请求作为异步批量请求时(大约超过 5 个)。

某些请求将失败并显示以下消息,某些请求已取消

失败消息:

底层 InputStream 已关闭。无法编码字符串值:底层 InputStream 已关闭某些请求已取消。

请告知我该如何解决这个问题。

0 投票
0 回答
45 浏览

exist-db - Exist-db 并行请求(批量请求)在现有数据库 restxq(发布、放置)上失败

我在 restxq 多个并行的 post 请求上遇到问题,put。当来自 Web 应用程序的请求作为异步批量请求时(大约超过 5 个)。我正在使用存在 db 5.1.0 或 5.1.1 我通过 angular forkjoin 发送请求,因为我想并行提交超过 20 或 50 个请求

某些请求将失败并显示以下消息,某些请求已取消

失败消息:底层 InputStream 已关闭。无法编码字符串值:底层 InputStream 已关闭某些请求已取消。

请告知我该如何解决这个问题。

0 投票
1 回答
308 浏览

xml - 如何使用带有 RestXQ 的 BaseX 配置“hello world”HTML 页面?

更多的是使用问题而不是编程问题,涉及:

BaseX RESTXQ “hello world”示例

如何将 RESTXQ 与 BaseX 一起用于简单的 Web 应用程序?

basex/rest - 博客完整应用

有没有办法让 BaseX 提供 HTML 文档?

当然,分叉博客应用程序很容易。然而,它也是八岁。

文档中的示例是:

准确地说,这是保存到哪里?它是添加到BaseX自身内部的数据库中还是作为文件存在于外部?