1

我尝试使用此文档在服务器端 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>

我可以看到Modulesdb 中的模块。当我尝试使用转换插入文档时,效果很好。

为什么我不能在浏览器中查看转换?

4

1 回答 1

4

不幸的是,那个休息端点对浏览器不是很友好。必需/可接受的Accept标头值与浏览器通常发送的值不匹配。

当您通过浏览器发出 GET 请求时,它正在发送以下 Accept 标头:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

接受

此字段包含一个以分号分隔的表示方案列表(内容类型元信息值),将在对此请求的响应中被接受。

不幸的是,v1/config/transform/{name} (GET) REST 端点对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
于 2018-01-27T18:25:40.080 回答