您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
Apigee Edge 支援哪個版本的 Node.js?
Edge 目前支援 Node.js 0.10.32。
Edge 支援哪些標準 Node.js 模組?
請參閱下表,瞭解 Edge 包含哪些標準 Node.js 模組。在某些情況下,內含模組僅支援部分功能。這些是 Node.js 內建的模組。| Module | 狀態 | 附註 |
|---|---|---|
assert |
是否支援 | |
buffer |
是否支援 | |
child_process |
受限制 | 如果嘗試產生子程序,系統會擲回例外狀況。不過,系統支援「fork」,可產生子指令碼。 |
cluster |
已停用 | 方法 cluster.isMaster 一律會傳回 true,其他方法則不會實作。 每個 Edge 訊息處理器都會部署一份 Node.js 指令碼。 |
crypto |
是否支援 | |
dns |
支援 | |
domain |
是否支援 | |
dgram |
受限制 | 由於網路架構的關係,Apigee 環境中的 Node.js 應用程式無法透過 UDP 存取網際網路上的服務。 |
events |
是否支援 | |
fs |
受限制 | 檔案系統存取權僅限於啟動指令碼的目錄,也就是 /resources/node 目錄。Node.js 指令碼可能會讀取及寫入這個目錄中的檔案 (例如做為暫時的暫存區),但無法保證檔案的保留時間。 |
http |
是否支援 | 傳入要求的虛擬主機和路徑是在 API Proxy 中指定,而非由 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 Proxy 的 Apigee Edge 管理 UI 中,按一下「Node.js Logs」按鈕。 在 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 上取得。
| Module | 說明 |
|---|---|
| apigee-access | 讓在 Apigee Edge 平台上執行的 Node.js 應用程式存取 Apigee 專屬功能。您可以使用這個模組執行下列操作:存取及修改流程變數、從安全儲存空間擷取資料,以及使用 Edge 快取、配額和 OAuth 服務。另請參閱「使用 apigee-access 模組」。 |
| trireme-support | 讓 Node.js 應用程式充分運用 Trireme 專屬功能。目前僅支援一項功能,也就是載入以 Java 建構的 Node.js 模組。注意: Edge Cloud 不支援 loadJars。 |
| trireme-xslt | 呈現 XLST 處理的抽象概念。這項功能專為 Trireme 平台設計,可在 Java 上執行 Node.js 應用程式時,有效處理 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 管理 UI 中代理程式的「Node.js Logs」按鈕。您也可以使用「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 需要這個「port」引數,但 Apigee Edge 會忽略這個參數。Node.js 指令碼執行的 API Proxy 會指定要監聽的「虛擬主機」,Node.js 應用程式會使用這些虛擬主機,就像任何其他 Apigee Edge Proxy 一樣。
Apigee 中的每個環境都至少有一個虛擬主機。虛擬主機會定義與 Apigee 機構連線的 HTTP 設定。環境中的所有 API Proxy 都共用相同的虛擬主機。根據預設,每個環境都有兩個虛擬主機:default 和 secure。詳情請參閱「
取得虛擬主機」和「API 開發生命週期」。
apigeetool deploynodeapp 指令會產生 Node.js 應用程式周圍的 Apigee Edge 代理程式包裝函式。部署後,Node.js 應用程式會監聽環境定義的預設虛擬主機。Node.js 應用程式的網址一律為 http://{org_name}-{env_name}.apigee.net。
處理傳入要求
與其他 Apigee Edge 應用程式一樣,如果 Proxy 應用程式設為在 secure 虛擬主機上接聽,就會接受使用 HTTPS 的傳入要求。
處理傳出要求
除了接收傳入流量,Apigee Edge 內的 Node.js 應用程式也可以使用 http 和 https 模組,發出外送要求,就像其他 Node.js 應用程式一樣。這些模組在 Node.js 內部的運作方式與以往相同。
瞭解對 tls 模組的支援
Apigee Edge 支援 Node.js tls 模組。
這個模組使用 OpenSSL 提供傳輸層安全標準 (TLS) 和/或安全資料傳輸層 (SSL) 加密串流通訊。您可以使用 tls 模組,從 Edge 上執行的 Node.js 應用程式,建立與後端服務的安全連線。
如要瞭解 Apigee Edge 上的 tls 模組運作方式,請務必瞭解 Apigee Edge 如何使用 virtual hosts。Apigee 中的每個環境都至少有一個虛擬主機。虛擬主機會定義與 Apigee 機構連線的 HTTP 設定。環境中的所有 API Proxy 都共用相同的虛擬主機。根據預設,每個環境都有兩個虛擬主機:default 和 secure。如要進一步瞭解虛擬主機,請參閱「
取得虛擬主機」和「API 開發生命週期」。
接下來,我們將瞭解 Apigee Edge 如何處理 Node.js 應用程式傳入和傳出要求的 TLS (SSL) 通訊:
處理傳入要求
視貴機構的虛擬主機設定方式而定,Edge 提供下列選項:
- 如果 API Proxy 設定為監聽
default虛擬主機,就會接受透過 HTTP 傳送的要求。 - 如果 API Proxy 設定為監聽
secure虛擬主機,就會接受透過 HTTPS 傳送的要求。網址會位於apigee.net網域下,並使用*.apigee.net的萬用 SSL 憑證。只要應用程式向apigee.net網域發出要求,SSL 憑證就會正常驗證。
處理傳出要求
您可以使用 tls 模組發出外送要求,方式與在 Node.js 中正常發出要求相同。基本上,您需要在 resources/node 目錄中新增用戶端金鑰和憑證 (.pem 檔案),並在指令碼中載入這些檔案。如要瞭解如何使用 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>