Marklogic 9 + Roxy:无法使用Node.js连接到创build的数据库

我正在尝试Roxy部署者。 Roxy应用程序是使用默认的应用程序types创build的。 我安装了一个新的ML 9数据库,并使用默认端口(8040和8041)运行了“ml local bootstrap”

然后我设置一个节点应用程序。 我尝试了以下(示例代码从https://docs.marklogic.com/jsdoc/index.html )

var marklogic = require('marklogic'); var conn = { host: '192.168.33.10', port: 8040, user: 'admin', password: 'admin', authType: 'DIGEST' } var db = marklogic.createDatabaseClient(conn); db.createCollection( '/books', {author: 'Beryl Markham'}, {author: 'WG Sebald'} ) .result(function(response) { console.log(JSON.stringify(response, null, 2)); }, function (error) { console.log(JSON.stringify(error, null, 2)); }); 

运行脚本给了我一个错误,如:

 $ node test.js { "message": "write document list: cannot process response with 500 status", "statusCode": 500, "body": "<error:error xsi:schemaLocation=\"http://marklogic.com/xdmp/error error.xsd\" xmlns:error=\"http://marklogic.com/xdmp/error\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n <error:code>XDMP-IMPMODNS</error:code>\n <error:name>err:XQST0059</error:name>\n <error:xquery-version>1.0-ml</error:xquery-version>\n <error:message>Import module namespace mismatch</error:message>\n <error:format-string>XDMP-IMPMODNS: (err:XQST0059) Import module namespace http://marklogic.com/rest-api/endpoints/config does not match target namespace http://marklogic.com/rest-api/endpoints/config_DELETE_IF_UNUSED of imported module /MarkLogic/rest-api/endpoints/config.xqy</error:format-string>\n <error:retryable>false</error:retryable>\n <error:expr/>\n <error:data>\n <error:datum>http://marklogic.com/rest-api/endpoints/config</error:datum>\n <error:datum>http://marklogic.com/rest-api/endpoints/config_DELETE_IF_UNUSED</error:datum>\n <error:datum>/MarkLogic/rest-api/endpoints/config.xqy</error:datum>\n </error:data>\n <error:stack>\n <error:frame>\n <error:uri>/roxy/lib/rewriter-lib.xqy</error:uri>\n <error:line>5</error:line>\n <error:column>0</error:column>\n <error:xquery-version>1.0-ml</error:xquery-version>\n </error:frame>\n </error:stack>\n</error:error>\n" } 

如果我将端口更改为8000(插入到文档中的默认应用程序服务器),那么节点函数按预期正确执行。 我不确定是否需要使用Roxy创build的应用程序服务器来configuration其他任何内容,以便它可以与node.js应用程序一起使用。

我不确定错误消息中的“DELETE_IF_UNUSED”部分来自哪里。 在Roxy生成的configuration文件中似乎没有任何这样的文本。

编辑:当通过浏览器访问192.168.33.10:8040,我得到一个类似的错误的XML:

 <error:error xsi:schemaLocation="http://marklogic.com/xdmp/error error.xsd" xmlns:error="http://marklogic.com/xdmp/error" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <error:code>XDMP-IMPMODNS</error:code> <error:name>err:XQST0059</error:name> <error:xquery-version>1.0-ml</error:xquery-version> <error:message>Import module namespace mismatch</error:message> <error:format-string>XDMP-IMPMODNS: (err:XQST0059) Import module namespace http://marklogic.com/rest-api/endpoints/config does not match target namespace http://marklogic.com/rest-api/endpoints/config_DELETE_IF_UNUSED of imported module /MarkLogic/rest-api/endpoints/config.xqy</error:format-string> <error:retryable>false</error:retryable> <error:expr/> <error:data> <error:datum>http://marklogic.com/rest-api/endpoints/config</error:datum> <error:datum>http://marklogic.com/rest-api/endpoints/config_DELETE_IF_UNUSED</error:datum> <error:datum>/MarkLogic/rest-api/endpoints/config.xqy</error:datum> </error:data> <error:stack> <error:frame> <error:uri>/roxy/lib/rewriter-lib.xqy</error:uri> <error:line>5</error:line> <error:column>0</error:column> <error:xquery-version>1.0-ml</error:xquery-version> </error:frame> </error:stack> </error:error> 

重要的是,MarkLogic版本是9.0-3.1。 这也是一个全新的安装。

有什么build议?

根据注释,看起来问题是Node.js客户端API期望与REST API端点交谈,但默认的Roxyconfiguration是MVC应用程序。 如果您的Roxy应用程序还没有做任何重大的事情,我会删除它,并创build一个--app-type=rest

 $ ml new my-app --app-type=rest --server-version=9 $ ml local bootstrap $ ml local deploy modules 

然后尝试你的Node应用程序。