Marklogic 9 + Roxy: не удается подключиться к созданной базе данных с помощью Node.js

Я опробую Roxy. Приложение Roxy было создано с использованием типа приложения по умолчанию. Я установил новую базу данных ML 9 и запустил "ml local bootstrap", используя порты по умолчанию (8040 и 8041)

Затем я настраиваю приложение узла. Я попробовал следующее (пример кода с 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 сервера приложений, чтобы он работал с приложением node.js.

Я не уверен, откуда берется часть "DELETE_IF_UNUSED" в сообщении об ошибке. Похоже, такого текста в файлах конфигурации, генерируемых Roxy, нет.

Изменить: При доступе к 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. Это свежая установка тоже.

Любой совет?

1 ответ

Решение

Исходя из комментариев, похоже, что проблема заключается в том, что клиентский API Node.js ожидает соединения с конечной точкой API REST, но конфигурация Roxy по умолчанию является приложением MVC. Если вы еще ничего не сделали с вашим приложением Roxy, я бы удалил его и создал с --app-type=rest,

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

Затем попробуйте приложение Node.

Другие вопросы по тегам