您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
Apigee Edge 支持哪个版本的 Node.js?
Edge 目前支持 Node.js 0.10.32。
Edge 支持哪些标准 Node.js 模块?
使用下表确定 Edge 上包含哪些标准 Node.js 模块。在某些情况下,随附的模块仅部分受支持。这些是 Node.js 内置的模块。| 模块 | 状态 | 备注 |
|---|---|---|
assert |
支持 | |
buffer |
支持 | |
child_process |
受限 | 如果尝试生成子进程,系统会抛出异常。不过,支持使用“fork”来生成子脚本。 |
cluster |
已停用 | 方法 cluster.isMaster 始终返回 true,其他方法未实现。 每个 Node.js 脚本的一个副本会部署到每个 Edge 消息处理器。 |
crypto |
支持 | |
dns |
支持 | |
domain |
支持 | |
dgram |
受限 | 由于我们的网络架构,Apigee 环境中的 Node.js 应用将无法通过 UDP 访问互联网上的服务。 |
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 基础架构中的日志文件。您可以在 Apigee Edge 管理界面中点击 API 代理中的 Node.js 日志按钮,查看这些日志。 在 Apigee Edge 上运行的脚本没有标准输入。不过,您可以使用 TargetEndpoint 的 ScriptTarget 元素传递实参。如需了解详情,请参阅高级 ScriptTarget 配置。 |
stream |
支持 | |
string_decoder |
支持 | |
timers |
已包含 | |
tls |
支持 | 传输层安全协议 (TLS) 参数的工作方式与常规 Node.js 中的工作方式基本相同。如需了解详情,请参阅在 Apigee Edge 上使用 TLS (SSL) Node.js 模块。 |
tty |
已停用 | 在 Apigee Edge 上运行的脚本没有标准输入。 |
url |
支持 | |
util |
支持 | |
vm |
支持 | |
zlib |
支持 |
其他受支持的模块
本部分列出了标准 Node.js 中不支持但在 Trireme 和在 Apigee Edge 上运行的 Trireme 中受支持的其他模块。Trireme 是在 Apigee Edge 上运行的开源 Node.js 容器。它旨在在 Java 虚拟机 (JVM) 中运行 Node.js 脚本。所有这些模块均可在 NPM 上获取。
| 模块 | 说明 |
|---|---|
| apigee-access | 允许在 Apigee Edge 平台上运行的 Node.js 应用访问 Apigee 特有的功能。您可以使用此模块来:访问和修改流变量、从安全存储区检索数据,以及使用 Edge 缓存、配额和 OAuth 服务。另请参阅使用 apigee-access 模块。 |
| trireme-support | 让 Node.js 应用能够利用 Trireme 特有的功能。目前仅支持一项功能,即加载用 Java 构建的 Node.js 模块。注意:Edge Cloud 不支持 loadJars。 |
| trireme-xslt | 提供 XSLT 处理的抽象。它专门为 Trireme 平台设计,可在 Node.js 应用在 Java 上运行时高效处理 XSLT。 |
| trireme-jdbc | 提供从 Node.js 访问 JDBC 的权限。注意:Edge Cloud 不支持此功能。对于 Edge Private Cloud,您可以将 JDPC JAR 文件放在类路径中,然后使用此模块。 |
对常用 Node.js 模块的支持
Node.js 脚本的限制
不过,请注意,Edge 对 Node.js 脚本施加了某些限制,例如:
- 由于 Edge 边缘网络架构,Apigee Edge 环境中的 Node.js 应用无法通过 UDP 访问互联网上的服务。
- 文件系统访问权限仅限于启动 Node.js 脚本的目录:/resources/node 目录。Node.js 脚本可以读取和写入此目录中的文件(例如作为临时暂存区),但无法保证文件会保留多长时间。
- 尝试侦听传入的 TCP 连接会生成异常。
- 不支持用于操纵用户 ID、群组成员资格和工作目录的功能。
- 对于标准输入,您只能使用 TargetEndpoint 的 ScriptTarget 元素传递实参。如需了解详情,请参阅高级 ScriptTarget 配置。
- 对于标准输出,您只能使用 Edge 管理界面中代理的“Node.js 日志”按钮。您还可以使用“apigeetool getlogs”命令。如需了解详情,请参阅部署独立的 Node.js 应用。
- 不支持依赖于原生代码的模块。
- 不支持依赖于 EcmaScript 6 功能(例如 Promise 和生成器)的模块。
- 不支持 Node.js 运行时标志(例如“harmony-proxies”)。
在 Edge for Private Cloud 上设置 IP 连接限制
Edge for Private Cloud 可以限制 Node.js 代码访问以“10.”开头的 IP 地址,“192.168”和 localhost。如果您尝试访问这些 IP 地址,则会看到如下形式的错误:
{ [Error: connect EINVAL] message: 'connect EINVAL', code: 'EINVAL', errno: 'EINVAL', syscall: 'connect' }
您可以在每个消息处理器的 message-processors.properties 文件中设置 conf_nodejs_connect.ranges.denied 属性,以修改这些限制。默认情况下,此属性的值为:
- 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=(表示无限制)
如需设置此属性,请执行以下操作:
- 在编辑器中打开 message-processor.properties 文件。如果该文件不存在,请创建它:
> vi /<inst_root>/apigee/customer/application/message-processor.properties - 根据需要设置相应属性。例如,如需仅拒绝访问 localhost,请使用以下命令:
conf_nodejs_connect.ranges.denied=127.0.0.1/32 - 保存更改。
- 确保属性文件归“apigee”用户所有:
> chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties - 重启消息处理器:
> /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart
了解对 http 和 https 模块的支持
在 Apigee Edge 中运行的所有 Node.js 应用都必须使用 http 或 https 模块来监听传入请求。如果您部署的脚本不侦听传入请求,它只会执行并退出。
Node.js 中 http 和 https 模块的 listen 方法将端口号作为参数。例如:
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 组织连接的 HTTP 设置。环境中的所有 API 代理共享相同的虚拟主机。默认情况下,每个环境都有两个可用的虚拟主机:default 和 secure。如需了解详情,请参阅
获取虚拟主机和 API 开发生命周期。
apigeetool deploynodeapp 命令会围绕 Node.js 应用生成一个 Apigee Edge 代理封装容器。部署后,Node.js 应用会监听为环境定义的默认虚拟主机。Node.js 应用的网址始终为 http://{org_name}-{env_name}.apigee.net。
处理传入请求
与其他 Apigee Edge 应用一样,如果代理应用设置为侦听 secure 虚拟主机,则它将接受使用 HTTPS 的入站请求。
处理出站请求
除了接收传入流量之外,Apigee Edge 中的 Node.js 应用还可以像任何其他 Node.js 应用一样,使用 http 和 https 模块发出出站请求。这些模块在 Node.js 中的工作方式与以往完全相同。
了解对 tls 模块的支持
Apigee Edge 支持 Node.js tls 模块。
此模块使用 OpenSSL 提供传输层安全 (TLS) 和/或安全套接字层 (SSL) 加密流通信。您可以使用 tls 模块从在 Edge 上运行的 Node.js 应用创建与后端服务的安全连接。
如需了解 tls 模块在 Apigee Edge 上的运作方式,请务必了解 virtual hosts 在 Apigee Edge 上的使用方式。Apigee 中的每个环境都至少有一个虚拟主机。虚拟主机定义了与 Apigee 组织连接的 HTTP 设置。环境中的所有 API 代理共享相同的虚拟主机。默认情况下,每个环境都有两个可用的虚拟主机:default 和 secure。如需详细了解虚拟主机,请参阅
获取虚拟主机和 API 开发生命周期。
现在,我们来看看 Apigee Edge 如何处理 Node.js 应用中传入和传出请求的 TLS (SSL) 通信:
处理传入请求
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 name="default"> <ScriptTarget> <ResourceURL>node://hello.js</ResourceURL> <EnvironmentVariables> <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> </EnvironmentVariables> <Arguments> <Argument>ARG</Argument> </Arguments> </ScriptTarget> </TargetEndpoint>