首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Marklogic Grove中处理node.js中的REST API?

如何在Marklogic Grove中处理node.js中的REST API?
EN

Stack Overflow用户
提问于 2020-11-09 15:30:06
回答 1查看 61关注 0票数 2

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

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

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

如果REST API是一个特定的路径,我希望在不将调用转发到MarkLogic的情况下在node.js中进行处理。我应该在哪里以及如何实现它?(仅对经过身份验证的用户可用。)

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

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

EN

回答 1

Stack Overflow用户

发布于 2020-11-09 17:38:25

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

该子项目的顶级README有一个指向有关Endpoints and Routes的更多文档的指针。它也不会提供很多帮助,但它会告诉你去哪里找。grove-node中间层基本上是一个ExpressJS服务器。我们把主要的、大部分是静态的逻辑放在一个可以找到here的子模块中。重要的是,实际的业务逻辑(称为中间件)放在名为routes/的文件夹中。

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

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

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

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

代码语言:javascript
复制
// 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);
});

它用在一个应用程序中,该应用程序具有一个名为Media的实体的CRUD端点。上面的路由提供了对媒体文件的实际二进制文件的访问,而普通的CRUD GET调用返回包含元信息的实体信封。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64747392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档