无法在 Marklogic 9 中使用 REST 在浏览器中查看转换?
Can't able to view a transform in browser using REST in Marklogic 9?
我尝试使用此 documentation 在服务器端 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
数据库中看到模块。当我尝试使用转换插入文档时效果很好。
为什么我无法在浏览器中查看转换?
不幸的是,该 rest 端点对浏览器不是很友好。 required/acceptable Accept header 值与浏览器通常发送的值不匹配。
当您通过浏览器发出 GET 请求时,它会发送以下接受 header:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
This field contains a semicolon-separated list of representation schemes ( Content-Type metainformation values) which will be accepted in the response to this request.
不幸的是,v1/config/transform/{name} (GET) REST 端点对 Accept header 接受的内容很严格,并且需要一个特定的值:
The MIME type of the data expected in the response, either application/xslt+xml
or application/xquery
.
如果您使用文档中的示例 CURL 命令,并为您的转换 URI 进行自定义,它将 return 预期的响应。
curl --anyauth --user public\admin:admin -X GET -i \
-H "Accept: application/xquery" \
http://localhost:9963/v1/config/transforms/rest-tsm
我尝试使用此 documentation 在服务器端 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
数据库中看到模块。当我尝试使用转换插入文档时效果很好。
为什么我无法在浏览器中查看转换?
不幸的是,该 rest 端点对浏览器不是很友好。 required/acceptable Accept header 值与浏览器通常发送的值不匹配。
当您通过浏览器发出 GET 请求时,它会发送以下接受 header:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
This field contains a semicolon-separated list of representation schemes ( Content-Type metainformation values) which will be accepted in the response to this request.
不幸的是,v1/config/transform/{name} (GET) REST 端点对 Accept header 接受的内容很严格,并且需要一个特定的值:
The MIME type of the data expected in the response, either
application/xslt+xml
orapplication/xquery
.
如果您使用文档中的示例 CURL 命令,并为您的转换 URI 进行自定义,它将 return 预期的响应。
curl --anyauth --user public\admin:admin -X GET -i \
-H "Accept: application/xquery" \
http://localhost:9963/v1/config/transforms/rest-tsm