您正在查看的是 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 基础架构内的日志文件。您可以通过点击 API 代理的 Node.js 日志按钮和 Apigee Edge 管理界面来查看这些日志。 在 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 不支持但 Apigee Edge 上运行的 Trireme 和 Trireme 支持的模块。Trireme 是在 Apigee Edge 上运行的开源 Node.js 容器。它设计用于在 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 上运行时,可高效地处理 XSLT。 |
trireme-jdbc | 提供从 Node.js 访问 JDBC 的权限。注意:在 Edge Cloud 中不受支持。对于 Edge Private Cloud,您可以将 JDPC JAR 文件放在类路径中并使用此模块。 |
支持常用的 Node.js 模块
对 Node.js 脚本的限制
但请注意,Edge 对 Node.js 脚本施加了某些限制,例如:
- 由于采用边缘网络架构,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 和 Generator)的模块。
- 不支持“harmony-proxies”之类的 Node.js 运行时标志。
在 Edge 上为私有云设置 IP 连接限制
私有云边缘可以限制 Node.js 代码访问以“10.”、“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-serviceedge-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.'); });
此“port”参数在 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 中的工作原理,请务必了解如何在 Apigee Edge 中使用 virtual hosts
。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>