Не можете просмотреть трансформацию в браузере, используя REST в Marklogic 9?

Я попытался установить ниже серверный JavaScript, используя эту документацию и сохранил ниже как rest-sjs

function insertTimestamp(context, params, content)
{
  if (context.inputType.search('json') >= 0) {
    var result = content.toObject();
    if (context.acceptTypes) {                 /* read */
      result.readTimestamp = fn.currentDateTime();
    } else {                                   /* write */
      result.writeTimestamp = fn.currentDateTime();
    }
    return result;
  } else {
    /* Pass thru for non-JSON documents */
    return content;
  }
};

exports.transform = insertTimestamp;

Я попытался выдвинуть это, используя ниже curl cmd:

curl --anyauth --user public\admin:admin -X PUT -i --data-binary @"C:/Users/name/Desktop/rest.sjs" -H "Content-type: application/vnd.marklogic-javascript" 'http://localhost:9963/v1/config/transforms/js-example'

Когда я использовал localhost:9963 и пошел в /v1/config/transforms Я могу видеть:

<rapi:transforms xmlns:rapi="http://marklogic.com/rest-api">
<rapi:transform>
<rapi:name>rest-tsm</rapi:name>
<rapi:source-format>javascript</rapi:source-format>
<rapi:transform-parameters/>
<rapi:transform-source>/v1/config/transforms/rest-tsm</rapi:transform-source>
</rapi:transform>
</rapi:transforms>

Но когда я пошел через модуль /v1/config/transforms/rest-tsm Я вижу сообщение об ошибке:

<error-response xmlns="http://marklogic.com/xdmp/error">
<status-code>406</status-code>
<status>Unacceptable Type</status>
<message-code>REST-UNACCEPTABLETYPE</message-code>
<message>
REST-UNACCEPTABLETYPE: (err:FOER0000) No acceptable content type: None of the requested types text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 can be provided
</message>
</error-response>

Я вижу модуль в Modules дб. Который работал нормально, когда я пытаюсь вставить документ с помощью преобразования.

Почему я не могу просмотреть преобразование в браузере?

1 ответ

Решение

К сожалению, эта конечная точка отдыха не очень удобна для браузера. Обязательные / приемлемые значения заголовка Accept не совпадают с тем, что обычно отправляют браузеры.

Когда вы отправляли запрос GET через браузер, он отправлял следующий заголовок Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

принимать

Это поле содержит разделенный точкой с запятой список схем представления (значения метаинформации Content-Type), которые будут приняты в ответе на этот запрос.

К сожалению, конечная точка REST v1/config/transform/{name} (GET) является строгой в том, что она будет принимать для заголовка Accept, и ожидает определенного значения:

Тип MIME данных, ожидаемых в ответе, либо application/xslt+xml или же application/xquery,

Если вы используете пример команды CURL из документации и настроите ваш URI преобразования, он вернет ожидаемый ответ.

curl --anyauth --user public\admin:admin -X GET -i \
  -H "Accept: application/xquery" \
  http://localhost:9963/v1/config/transforms/rest-tsm
Другие вопросы по тегам