您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
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 的 Node.js 記錄按鈕,以及 API Proxy 的 Apigee Edge 管理 UI。 在 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 使用。
Module | 說明 |
---|---|
apigee-存取 | 允許在 Apigee Edge 平台上執行的 Node.js 應用程式存取 Apigee 專屬功能。您可以使用這個模組:存取及修改流程變數、從安全儲存庫擷取資料,以及使用 Edge 快取、配額和 OAuth 服務。另請參閱使用 apigee-存取 模組。 |
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 設定」。
- 針對標準輸出,您只能在 Proxy 的 Edge 管理 UI 中使用「Node.js 記錄檔」按鈕。您也可以使用「apigeetool getlogs」指令。詳情請參閱部署獨立的 Node.js 應用程式。
- 不支援需要原生程式碼的模組。
- 不支援需要使用 EcmaScript 6 功能的模組,例如 Promise 和產生器。
- 系統不支援「harmony-proxies」等 Node.js 執行階段旗標。
在 Edge 上設定私有雲的 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 重新啟動
瞭解 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 Proxy 包裝函式。部署之後,Node.js 應用程式會監聽為環境定義的預設虛擬主機。Node.js 應用程式的網址一律為 http://{org_name}-{env_name}.apigee.net
。
處理傳入要求
和其他 Apigee Edge 應用程式一樣,如果將 Proxy 應用程式設定為監聽 secure
虛擬主機,此 Proxy 就會接受使用 HTTPS 傳入的要求。
處理傳出要求
除了接收連入流量之外,Apigee Edge 中的 Node.js 應用程式也可以使用 http
和 https
模組發出傳出要求,就像其他 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 機構連線的 HTTP 設定。環境中的所有 API Proxy 都會共用相同的虛擬主機。根據預設,每個環境都有兩個虛擬主機:default
和 secure
。如要進一步瞭解虛擬主機,請參閱「
取得虛擬主機」和「API 開發生命週期」。
現在,讓我們來看看 Apigee Edge 如何在 Node.js 應用程式上處理傳入和傳出要求的傳輸層安全標準 (SSL) (SSL) 通訊:
處理傳入要求
視貴機構的虛擬主機的設定方式而定,Edge 提供以下選項:
- 如果將 API Proxy 設定為監聽
default
虛擬主機,則 API Proxy 會接受 HTTP 要求。 - 如果將 API Proxy 設定為監聽
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>