了解 Edge 对 Node.js 模块的支持

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

哪些版本的 Node.js 受支持 Apigee Edge 有哪些?

Edge 目前支持 Node.js 0.10.32。

哪些标准 Node.js 模块是 是否支持 Edge?

使用下表确定有哪些标准 Node.js 模块 包括在 Edge 中。在某些情况下,只支持部分包含的模块。这些是模块 Node.js 中内置的各种功能

模块 状态 备注
assert 支持
buffer 支持
child_process 受限 如果尝试生成子进程,则会抛出异常。不过, “叉子”支持生成下标。
cluster 已停用 方法 cluster.isMaster 始终返回 true,并且不会实现其他方法。 每个 Node.js 脚本的副本会部署到每个 Edge 消息处理器。
crypto 支持
dns 支持
domain 支持
dgram 受限 Apigee 环境中的 Node.js 应用将无法访问 这要归功于我们的网络架构。
events 支持
fs 受限 文件系统访问权限仅限于启动脚本的目录: /resources/node 目录中。Node.js 脚本可以 例如用作临时暂存区,但并不能保证 文件将保留多长时间
http 支持 传入请求的虚拟主机和路径在 API 代理中指定,而不是 HTTP 模块。请参阅“了解对 http 和 https 的支持 模块”。
https 支持 创建“https”服务器的行为方式与“http”服务器。请参阅“了解对 http 和 https 模块的支持”了解详情 信息。
module 支持
net 受限 如果尝试监听传入的 TCP 连接,则会产生异常。
path 支持
module 支持
process 部分支持 尚不支持操控用户 ID、群组成员资格和工作目录的功能 支持。
punycode 支持
querystring 支持
readline 已停用 在 Apigee Edge 上运行的脚本没有标准输入。
repl 已停用 在 Apigee Edge 上运行的脚本没有标准输入。
module 已包含
STDIO 支持

标准输出和错误被路由到 Apigee Edge 内的日志文件 基础架构您可以点击 Node.js 日志 按钮以及 API 代理的 Apigee Edge 管理界面中。

在 Apigee Edge 上运行的脚本没有标准输入。不过,您可以将 参数。如需了解更多详情,请参阅高级 ScriptTarget 配置

stream 支持
string_decoder 支持
timers 已包含
tls 支持 传输层安全协议 (TLS) 参数的工作方式与其在 常规 Node.js请参阅在 Apigee Edge 上使用 TLS (SSL) Node.js 模块 了解详情。
tty 已停用 在 Apigee Edge 上运行的脚本没有标准输入。
url 支持
util 支持
vm 支持
zlib 支持

其他支持的模块

本部分列出了标准 Node.js 不支持但 由在 Apigee Edge 上运行的 Trireme 和 Trireme 提供支持。Trireme 是一个开源 Node.js 容器,可在 Apigee Edge。它旨在在 Java 虚拟机 (JVM) 内运行 Node.js 脚本。以下所有权限: NPM 上提供了这些模块。

模块 说明
apigee-access 允许 Apigee Edge 平台上运行的 Node.js 应用访问 特定于 Apigee 的功能。您可以使用此模块执行以下操作:访问和修改流 变量、从安全存储区检索数据,以及使用边缘缓存、配额和 OAuth 服务。另请参阅使用 apigee-access 模块
trireme-support 让 Node.js 应用能够充分利用 Trireme 特有的功能。目前 只支持一项功能 - 加载用 Java 构建的 Node.js 模块。注意: Edge Cloud 不支持 loadJars。
trireme-xslt 提供了 XLST 处理的抽象概念。它是专为 Trireme 设计的, 以便在运行 Node.js 应用时 Java。
trireme-jdbc 提供从 Node.js 访问 JDBC 的权限。注意:在 Edge Cloud 中不受支持。适用于 Edge Private Cloud 上,您可以将 JDPC JAR 文件放在类路径中并使用此模块。

支持常用的 Node.js 模块

Node.js 脚本限制

但请注意,Edge 会对 Node.js 脚本施加某些限制,例如 以下:

  • Apigee Edge 环境中的 Node.js 应用无法访问互联网上的服务 这要得益于边缘网络架构
  • 文件系统访问权限仅限于启动 Node.js 脚本的目录: /resources/node 目录中。Node.js 脚本可以读取和写入此目录中的文件, 作为临时暂存区,但无法保证文件 持久保留。
  • 尝试监听传入的 TCP 连接会产生异常。
  • 尚不支持操控用户 ID、群组成员资格和工作目录的功能 支持。
  • 对于标准输入,您只能使用 ScriptTarget 中的 元素。请参阅高级 ScriptTarget 配置
  • 对于标准输出,您只能使用 Edge 中的 Node.js 日志按钮 代理的管理界面。您还可以使用“apigeetool getlogs”命令。有关 请参阅部署 独立的 Node.js 应用
  • 不支持依赖于原生代码的模块。
  • 依赖 EcmaScript 6 功能的模块(如 Promise 和 Generators)则不 支持。
  • Node.js 运行时标志,例如“harmony-proxies”不受支持。

设置 IP 连接限制 适用于私有云的 Edge

适用于私有云的 Edge 可限制 Node.js 代码访问 以“10.”表示,“192.168”和 localhost。如果您尝试访问这些 IP 地址, 会看到以下形式的错误:

{ [Error: connect EINVAL] message: 'connect EINVAL', code: 'EINVAL', errno: 'EINVAL', syscall: 'connect' }

您可以通过在以下位置设置 conf_nodejs_connect.ranges.denied 属性来修改这些限制: message-processors.properties 每个消息处理器都有一个单独的文件。默认情况下,此属性的值为:

  • Edge 4.17.05 及更低版本conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
  • Edge 4.17.09 及更高版本conf_nodejs_connect.ranges.denied=(意味着 无限制)

如需设置此属性,请执行以下操作:

  1. 打开 message-processor.properties 文件 编辑器。如果该文件不存在,请创建:
    &gt;六 /&lt;inst_root&gt;/apigee/customer/application/message-processor.properties
  2. 根据需要设置属性。例如,要仅拒绝对 localhost 的访问:
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. 保存更改。
  4. 确保属性文件归“apigee”所有用户:
    &gt; chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. 重启消息处理器:
    &gt; /<inst_root>/apigee/apigee-service/bin/apigee-serviceedge-message-processor 重启

了解对 http 和 https 模块的支持

在 Apigee Edge 中运行的所有 Node.js 应用都必须使用 httphttps 模块,用于监听传入的请求。如果您要部署一个 不会监听传入的请求,而是直接执行并退出。

httphttps 模块的 listen 方法 Node.js 将端口号作为参数。例如:

svr.listen(process.env.PORT || 9000, function() {
   console.log('The server is running.');
});

这个“端口”参数在 Node.js 中是必需参数,但 Apigee Edge 会忽略此参数。相反, 运行 Node.js 脚本的 API 代理指定“虚拟主机”让它在监听 Node.js 应用使用这些虚拟主机,就像其他任何 Apigee Edge 一样 代理。

Apigee 中的每个环境至少有一个虚拟主机。虚拟主机定义 与 Apigee 组织的连接设置。环境中的所有 API 代理共享 多个虚拟主机。默认情况下,每个环境有两个虚拟主机: defaultsecure。有关详情,请参见 获取虚拟主机API 开发生命周期

apigeetool deploynodeapp 命令会生成 Apigee Edge 代理封装容器 Node.js 应用部署后,Node.js 应用将监听默认的 为环境定义的虚拟主机。Node.js 应用的网址始终是 http://{org_name}-{env_name}.apigee.net

处理传入 请求

与其他 Apigee Edge 应用一样,如果代理应用设置为监听 secure 虚拟主机,那么它将接受使用 HTTPS 的传入请求。

处理传出 请求

除了接收传入流量外,Apigee Edge 内的 Node.js 应用还可以使用 httphttps 模块,用于像任何其他 Node.js 一样发出出站请求 应用。这些模块的工作方式与往常在 Node.js 中一样。

了解对 TLS 模块

Apigee Edge 支持 Node.js tls 模块。 此模块使用 OpenSSL 提供传输层安全协议 (TLS) 和/或安全套接字层 (SSL) 加密的数据流通信。您可以使用 tls 模块来创建 从 Edge 上运行的 Node.js 应用到后端服务的连接。

如需了解 tls 模块在 Apigee Edge 上的工作原理,请务必 了解如何在 Apigee Edge 上使用 virtual hosts。Apigee 中的各种环境 具有至少一个虚拟主机。虚拟主机定义与 Apigee 组织。一个环境中的所有 API 代理都共享相同的虚拟主机。默认情况下 每个环境都有两个虚拟主机:defaultsecure。有关虚拟主机的详细信息,请参见 获取虚拟主机API 开发生命周期

现在,我们来看看 Apigee Edge 如何处理传入和传出的 TLS (SSL) 通信 Node.js 应用上的请求:

处理传入 请求

根据贵组织的虚拟主机配置方式,Edge 可为您提供以下功能 选项:

  • 如果 API 代理已配置为监听 default 虚拟主机,则 通过 HTTP 接受请求。
  • 如果 API 代理已配置为监听 secure 虚拟主机,则 接受通过 HTTPS 发送的请求。该网址将位于 apigee.net 网域下,并且 将为“*.apigee.net”使用通配符 SSL 证书。只要应用 向 apigee.net 域发送请求,然后 SSL 证书会验证 。

处理传出 请求

您可以使用 tls 模块发出传出请求,方式与 通常是在 Node.js 中。从根本上说,您需要添加客户端密钥和证书 (.pem 文件)复制到 resources/node 目录下,并将它们加载到 脚本。如需了解如何使用 tls 模块及其方法,请参阅 Node.js TLS 模块文档。

高级 ScriptTarget 配置

在 <TargetEndpoint>定义,即 <ScriptTarget>需要额外 <Resource网址> 之外的可选参数。您也可以传递命令行参数和 将环境变量与 <EnvironmentVariables> 传递给 Node.js 脚本和 &lt;Arguments&gt;参数:
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>

<ph type="x-smartling-placeholder">