marklogic - 如何在 Marklogic Grove 中处理 Node.js 中的 REST API?

标签 marklogic marklogic-dhf

我正在使用 MarkLogic Grove(React) 开发 UI 应用程序。

默认情况下,来自网络浏览器的 REST API 调用将直接转发到 MarkLogic。

例如:http://主机名/v1/resources/foo/

如果REST API是特定路径,我想在node.js中按原样进行处理,而不将调用转发给MarkLogic。 我应该在哪里以及如何实现它?(仅适用于经过身份验证的用户。)

例如:http://hostname/my-rest-api/bar

我想要一些建议,因为 Grove 的源代码太多而且令人困惑。

最佳答案

不幸的是,Grove 的文档还没有完成。如果谈论将前端调用编码到 MarkLogic 后端,那么您谈论的是 Grove 中间层:grove-node 。该子项目中嵌入了一些文档,这可能是最好的起点。

顶级README该子项目的 包含有关 Endpoints and Routes 的进一步文档的指针。它也没有提供太多帮助,但它确实告诉您去哪里寻找。 grove-node 中间层基本上是一个 ExpressJS服务器。我们将主要的、大部分静态的逻辑隐藏在一个子模块中,您可以在其中找到 here 。重要的部分,实际的业务逻辑(称为中间件)已放在名为 routes/ 的文件夹中。

尽管我们尝试以默认路由的形式提供许多常用功能,但您可以在其中编写/添加任何您喜欢的 ExpressJS 逻辑。您可以在 routes/api/index.js 顶部附近找到 routeFactory

包含最新版本的 grove-node 的 master 分支是最新的,但克隆该存储库的开发分支,并替换/更新生成的 middle 的内容仍然有用。项目中的 -tier/ 文件夹,其中包含该开发分支的内容。您应该能够进行相当简单的目录比较,以应用看起来有值(value)的更新。

开发分支至少包含一个名为 Grove defaultRestRoute 的新功能,它允许将随机 URI 重写为 MarkLogic 中的任何新目标 URI。最初用于 REST 扩展,但对于映射到数据服务、/v1/values、/v1/rows 或/v1/sparql 调用等也非常有用。这是比旧版白名单代理更好的方法,我们维护旧版白名单代理主要是为了快速解决方法和向后兼容性。

这是使用defaultRestRoute的示例,此代码附加在middle-tier/routes/api/index.js末尾附近:

// Special case for Raw Media
router.use('/crud/Media/:mediaId/:binaryType', function(req, res, next) {
  let mediaId = decodeURIComponent(req.params.mediaId);
  let binaryType = decodeURIComponent(req.params.binaryType);
  return routeFactory.defaultRestRoute({
    authProvider: authProvider,
    authed: true, // default: true
    neverCache: true, // default: true
    action: {
      uri: '/v1/documents',
      GET: function() {
        return {
          method: 'GET',
          body: null,
          params: {
            uri: '/Media/' + mediaId + '/binary.' + binaryType
          }
        };
      }
    }
  })(req, res, next);
});

它用于具有称为媒体的实体的 CRUD 端点的应用程序。上述路由提供对媒体文件的实际二进制文件的访问,而普通的 CRUD GET 调用返回包含元信息的实体信封。

关于marklogic - 如何在 Marklogic Grove 中处理 Node.js 中的 REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64747392/

相关文章:

replication - 我们可以在不同版本的 marklogic 之间建立森林或数据复制吗?

search - 使用范围索引比较来自同一片段的元素值

marklogic - 将 Facebook、Instagram、Twitter 等社交媒体数据加载到 Data HUB marklogic 中

MarkLogic Data Hub Framework Quick Start Hub - 连接到远程实例时出现错误 "unsupported auth scheme: [Basic realm=public]"

javascript - Marklogic 异常处理

marklogic - 如何使用 MarkLogic API 在 MarkLogic 集群中添加多个引导主机?

rest - 使用 MarkLogic REST API 进行文档版本控制

gradle - 在marklogic中执行mldeploy所需的最小内存是多少

marklogic - Marklogic DHS 不支持哪些 MarkLogic 功能