【问题标题】:How do I handle the REST API in node.js in Marklogic Grove?如何在 Marklogic Grove 的 node.js 中处理 REST API?
【发布时间】:2021-02-21 02:55:07
【问题描述】:

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

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

例如:http://hostname/v1/resources/foo/

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

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

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

【问题讨论】:

    标签: marklogic marklogic-dhf


    【解决方案1】:

    不幸的是,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/ 文件夹的内容仍然很有用在您的项目中使用该开发分支的内容。您应该能够进行相当直接的目录比较,以应用看起来值得的更新。

    开发分支至少包含一个名为 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 端点的应用程序,该端点用于名为 Media 的实体。上述路由提供了对媒体文件实际二进制文件的访问,而普通的 CRUD GET 调用返回包含元信息的实体信封。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多