前端页面如何直接请求 MarkLogic 的 REST API

发布于 2022-09-11 22:16:43 字数 1548 浏览 15 评论 0

是这样的,接到一个需求,是要在页面上请求客户自己 MarkLogic 的内容,然后把结果展示在页面上。比如客户给的 MarkLogic 链接是 http://ip/res/tag?rs:uri=uuid,在浏览器上访问是需要填写账户密码的,在 postman 里则要在验证里选择 Digest Auth,然后填写账号密码,才能请求成功,请求成功之后返回的是一个记录列表。

结果第一步请求 MarkLogic 链接就失败了,我前端用的 HTTP 库是 Axios,代码如下:

axios.request({
    url: http://ip/res/tag?rs:uri=uuid,
    method: 'get',
    headers: {'content-type': 'application/json',},
    auth: {
        username: 'uname',
        password: 'passd',
    },
});

结果就报跨域和 401,但是网上并没有搜到页面直接请求 MarkLogic 链接的案例,于是把焦点放在摘要认证上,在网上搜到一个 digest-auth-request 前端库,然而 demo 非常简单,我照着写了段代码:

digestAuthRequest('GET', http://ip/res/tag?rs:uri=uuid, 'uname', 'passd');

依旧是报跨域和 401,问题是我无法操作客户的服务器、没法看日志、也不懂 MarkLogic 是个什么东西,网上也没有案例,但是客户一口咬定他们之前自己用 flutter 可以调取这个链接,不需要额外的配置。后来我扒了官方的文档(https://www.marklogic.com/blo... ),找到了由中间件链接 MarkLogic 生成 token,再在页面里请求里,Axios 带着 token 访问 MarkLogic 链接的方法,于是我用 nodejs 写了个 express 中间件,把跨域和 401 的问题都解决了,能正常请求和返回值,我的代码如下:

axios.request({
    url: http://ip/res/tag?rs:uri=uuid,
    method: 'get',
    headers: {
        'content-type': 'application/json',
        Authorization: token, // 在中间件先生成令牌再获取到这里
    },
});

OK,这一关是通过了,但是客户还是觉得他们没有问题,是我把事情搞复杂化了,我确实不了解 MarkLogic ,请问前端页面如何直接请求 MarkLogic 的 REST API ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文