瞭解 Edge 對 Node.js 模組的支援

查看 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 應用程式無法存取下列來源的服務: 因此是透過 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 中的記錄檔 基礎架構按一下「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 不支援的其他模組, 。Trireme 是您在節點上執行的開放原始碼 Node.js 容器 Apigee Edge。旨在在 Java 虛擬機器 (JVM) 中執行 Node.js 指令碼,所有的運算 這些模組適用於 NPM。

模組 說明
apigee-access 允許在 Apigee Edge 平台上執行的 Node.js 應用程式存取 Apigee 專屬功能。您可以使用這個模組:存取及修改流程 變數、從安全儲存空間擷取資料,以及使用邊緣快取、配額和 OAuth 免費 Google Cloud 服務另請參閱使用 apigee-access 模組
trireme-support 讓 Node.js 應用程式使用 Trireme 特有的功能。目前 僅支援一項功能,載入以 Java 建構的 Node.js 模組。注意: Edge Cloud 不支援 loadJars。
trireme-xslt 呈現 XLST 處理作業的抽象化機制。專為 Trireme 打造 ,在執行 Node.js 應用程式時,更有效率地處理 XSLT Java。
trireme-jdbc 可從 Node.js 存取 JDBC。注意:Edge Cloud 不支援這項操作。適用於邊緣不公開 雲端,您可以將 JDPC JAR 檔案放在類別路徑中,然後使用這個模組。

支援常用的 Node.js 模組

Node.js 指令碼的限制

不過請注意,Edge 會對 Node.js 指令碼設下特定限制,例如: 包括:

  • Apigee Edge 環境中的 Node.js 應用程式無法存取網際網路上的服務 透過 UDP
  • 檔案系統存取權僅限於啟動 Node.js 指令碼的目錄: /resources/node 目錄。Node.js 指令碼可讀取及寫入這個目錄中的檔案, 做為暫存區,但是我們無法保證檔案 持續性。
  • 嘗試監聽傳入的 TCP 連線會產生例外狀況。
  • 操控使用者 ID、群組成員身分和工作目錄的功能 支援。
  • 如為標準輸入內容,您只能使用 ScriptTarget 傳遞引數 一個目標端點。詳情請參閱進階內容 ScriptTarget 設定
  • 如要輸出標準輸出內容,只能使用 Edge 中的 Node.js 記錄檔按鈕 Proxy 的管理 UI您也可以使用「apigeetool getlogs」指令如要 詳情請參閱部署 獨立的 Node.js 應用程式
  • 不支援依賴原生程式碼的模組。
  • 未採用 EcmaScript 6 功能 (例如 Promise 和 Generator) 的模組不適用 支援。
  • Node.js 執行階段旗標,例如「harmony-proxies」不支援。

設定 IP 連線限制 on Edge for Private Cloud

Edge for Private Cloud 可以限制 Node.js 程式碼從一開始存取 IP 位址 與「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 編輯。如果檔案不存在,請建立檔案:
    >V 罩杯 /<inst_root>/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-service Edge-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 Proxy 會指定「虛擬主機」聆聽內容 且 Node.js 應用程式使用相同的虛擬主機,就像其他 Apigee Edge 一樣 Proxy 上。

Apigee 中的每個環境都有至少一個虛擬主機。虛擬主機會定義 HTTP 以及與 Apigee 機構連線的設定環境中的所有 API Proxy 都會共用 相同的虛擬機器根據預設,每個環境可使用兩個虛擬主機: 《default》和《secure》。如需詳細資訊,請參閱 取得虛擬主機API 開發生命週期

apigeetool deploynodeapp 指令會產生 Apigee Edge Proxy 包裝函式 Node.js 應用程式的所有常見問題部署後,Node.js 應用程式會監聽預設值 為環境定義的虛擬主機Node.js 應用程式的網址一律為 http://{org_name}-{env_name}.apigee.net

處理傳入 要求

和其他 Apigee Edge 應用程式一樣,如果 Proxy 應用程式設為監聽 secure 虛擬主機之後,該主機就會接受使用 HTTPS 的傳入要求。

處理傳出 要求

除了接收傳入流量,Apigee Edge 中的 Node.js 應用程式還可以使用 httphttps 模組可提出傳出要求,就像其他 Node.js 一樣 應用程式。這些模組的運作方式與在 Node.js 中一樣。

瞭解 Tls 模組

Apigee Edge 支援 Node.js tls 模組。 這個模組會使用 OpenSSL 提供傳輸層安全標準 (TLS) 和/或安全資料傳輸層 (SSL) (SSL) 加密串流通訊。您可以使用 tls 模組建立安全的 這類連線會從在 Edge 上執行的 Node.js 應用程式啟動後端服務。

如要瞭解 tls 模組在 Apigee Edge 中的運作方式,請務必: 瞭解在 Apigee Edge 上如何使用 virtual hosts。Apigee 中的所有環境 至少有一個虛擬主機虛擬主機會定義與 Apigee 機構。環境中的所有 API Proxy 都會共用相同的虛擬主機。根據預設 每個環境都有兩種虛擬主機可用:defaultsecure。如要進一步瞭解虛擬主機,請參閱 取得虛擬主機API 開發生命週期

接著來看看 Apigee Edge 如何處理傳入和傳出的 TLS (SSL) 通訊 Node.js 應用程式的要求:

處理傳入 要求

視貴機構的虛擬主機設定方式而定,Edge 可提供下列服務 選項:

  • 如果 API Proxy 設為監聽 default 虛擬主機, 接受透過 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> 中定義,<ScriptTarget>則會採用額外的 <ResourceURL> 以外的自選參數。您也可以傳送指令列引數 將環境變數設為 Node.js 指令碼,方法是使用 <EnvironmentVariables>和 &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>