首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Mirth中从CDN读取JS库

在Mirth中从CDN读取JS库
EN

Stack Overflow用户
提问于 2019-11-14 01:27:41
回答 2查看 474关注 0票数 2

我正在做一些关于Mirth-Connect的测试。我有一个测试通道,它的数据类型是源和一个目标的Raw。目的地现在什么也不做。在源代码中,连接器类型是JavaScript Reader,并且代码执行以下操作...

代码语言:javascript
复制
var url = new java.net.URL('https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.fp.min.js');
var conn = url.openConnection();
conn.setRequestMethod('GET');

if(conn.getResponseCode() === 200) {
    var body = org.apache.commons.io.IOUtils.toString(conn.getInputStream(), 'UTF-8');
    logger.debug('CONTENT: ' + body);
    globalMap.put('_', body);
}

conn.disconnect();

// This code is in source but also tested in destination
logger.debug('FROM GLOBAL: ' + $('_')); // library was found
var arr = [1, 2, 3, 4];
var _ = $('_');
var newArr = _.chunk(arr, 2);

我得到的错误是:TypeError: Cannot find function chunk in object

我之所以要这样做,是为了通过单元测试构建自定义/内部库,并使用内部/公司CDN为它们提供服务,并允许Mirth使用它们。

我怎样才能使这个库对Mirth可用呢?

EN

回答 2

Stack Overflow用户

发布于 2019-11-15 22:15:44

Rhino实际上已经支持commonjs了,但是默认情况下mirth并没有启用它。下面是你如何在你的频道中使用它。

通道部署脚本

代码语言:javascript
复制
with (JavaImporter(
    org.mozilla.javascript.Context,
    org.mozilla.javascript.commonjs.module.Require,
    org.mozilla.javascript.commonjs.module.provider.SoftCachingModuleScriptProvider,
    org.mozilla.javascript.commonjs.module.provider.UrlModuleSourceProvider,
    java.net.URI
)) {
var require = new Require(
    Context.getCurrentContext(),
    this,
    new SoftCachingModuleScriptProvider(new UrlModuleSourceProvider([
        // Search path. You can add multiple URIs to this array
        new URI('https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/')
    ],null)),
    null,
    null,
    true
);
} // end JavaImporter

var _ = require('lodash.min');
require('lodash.fp.min')(_); // convert lodash to fp

$gc('_', _);

注意: cdnjs lodash fp包有一些奇怪的地方,它不能正确地检测环境并强制执行奇怪的两阶段导入。如果你使用,你只需要执行` `var =;`_(‘fp’)请求,它会在一个步骤中加载所有内容。

变压器

代码语言:javascript
复制
var _ = $gc('_');
logger.info(JSON.stringify(_.chunk(2)([1,2,3,4])));

注意:这是使用fp/chunk__的正确方法。在您的操作中,您使用标准的chunk语法调用。

补充评论

我认为这样做可能是可以的,在部署时下载一次库并将其存储在globalChannelMap中,然后在需要的地方从地图中检索它。如果您想在其他地方调用require对象,也可以将它本身存储在映射中。它将缓存并重用为将来对同一资源的调用而创建的对象。

我不会在部署脚本之外的任何地方创建新的Require对象,否则您将在每条消息(或者Javascript Reader的情况下是每次轮询)上重新下载资源。

编辑:我猜对于内部next主机,如果您打算让它在下一次轮询时立即获取更改而无需重新部署,那么在Javascript Reader中这可能是可取的,假设您将就地更新库而不是递增版本

正如Vibin建议的那样,使用代码模板的好处是,它们在部署时直接编译到您的通道中,并且在运行时没有额外的获取步骤。使库可用就像将其分配给您的频道一样简单。

票数 4
EN

Stack Overflow用户

发布于 2019-11-22 11:42:06

尽管导入第三方库可能是一种选择,但实际上我正在研究这一点,以便我们的团队能够编写我们自己的自定义函数,为它们编写单元测试,最后能够将代码拉入到Mirth中。我正在尝试使用lodash,但使用它并不是我的最终目标,它确实是。我的解决方案是在全局脚本中使用java进行REST GET调用。您的URL将是您想要引入的代码的GitHub原始URL。与我的原始问题相同的代码,但就像我说过的,URL是我想要引入的函数的原始GitHub URL。

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

https://stackoverflow.com/questions/58842520

复制
相关文章

相似问题

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