您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
簡介
使用 apigee-access
模組存取 Node.js 應用程式中的 Apigee Edge 流程變數。此模組提供取得、設定和刪除變數的方法。還提供了設定整數變數的便利方法。
流程變數存在於 API Proxy 流程的結構定義中。部分變數是 Edge 的「內建」功能。其他項目會在政策執行時建立,而您也可以建立自己的變數。流程變數通常用於將資料從一個政策傳遞到另一個政策,以及在條件式流程中設定條件。如要瞭解流程變數,請參閱流程變數和條件。
如需 apigee-access
模組及其其他功能的簡介,請參閱使用 apigee-access 模組。
實際範例
假設在要求流程路徑上執行的 Edge 政策設定了名為 AuthenticatedUserId
的變數。以下程式碼會存取該變數,並將其輸出至記錄中。此外,此程式碼會設定變數。接著,您可以從下方說明的政策存取該變數。
var http = require('http'); var apigee = require('apigee-access'); http.createServer(function (request, response) { // The request parameter must be a request object that came from the http module var userId = apigee.getVariable(request, 'AuthenticatedUserId'); apigee.setVariable(request, "custom.foo", "Bar"); console.log('Authenticated Apigee User ID is %s', userId); response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World\n'); }).listen(8124); console.log('Server running at http://127.0.0.1:8124/');
你可以將這段程式碼複製到 JavaScript 檔案中,並部署至 Edge,然後試用。呼叫 server.js
檔案。請按照下列步驟部署:
apigeetool deploynodeapp -u username -p password -o myorg -e test -n access -d . -m server.js -b /access
將應用程式部署至 Edge 之後,請使用以下設定將 AssignMessage 政策新增至 ProxyEndpoint 要求流程:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="AddUserId"> <DisplayName>AddUserId</DisplayName> <FaultRules/> <Properties/> <AssignVariable> <Name>AuthenticatedUserId</Name> <Value>ntesla</Value> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
接著,將另一個 AssignMessage 政策附加至 TargetEndpoint 回應預先流動:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="SetHeader"> <DisplayName>SetHeader</DisplayName> <FaultRules/> <Properties/> <Set> <Headers> <Header name="MySpecialHeader">{custom.foo}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
您可以用以下方式呼叫 Proxy:
curl -i http://myorg-test.apigee.net/access
現在,前往管理 UI 中的存取 Proxy 頁面,然後開啟「Develop」(開發) 檢視畫面。按一下「Node.js 記錄」,檢視 Proxy 的記錄檔輸出內容。如果 Proxy 設定正確,您會看到 userId 變數已設定完畢。 您也會看到終端機視窗中的 cURL 輸出內容中設定的標頭:
HTTP/1.1 200 OK Content-Type: text/plain Date: Tue, 27 05 2014 23:20:52 GMT MySpecialHeader: Bar Content-Length: 12 Connection: keep-alive
方法
getVariable
var result = getVariable(httpRequest, name);
取得具名變數。
參數:
httpRequest
:來自 http 模組的要求物件。name
:(字串) 要擷取的變數名稱。
傳回:
字串或數字,取決於使用 setVariable() 設定的類型、您於其他位置建立字串或數字的時間。如果您存取的是立即可用的邊緣變數,可以在變數參考資料中查看類型清單。如要瞭解透過政策建立的變數類型,請參閱特定政策參考資料主題。
例如:
var apigee = require('apigee-access'); // "httpRequest" must be a request object that came from the http module var val1 = apigee.getVariable(request, 'TestVariable'); var val2 = apigee.getVariable(request, 'request.client.ip');
setVariable
setVariable(httpRequest, name, value);
設定變數。部分變數為唯讀狀態,如果您嘗試設定其中一個變數,setVariable() 方法會擲回例外狀況。如要判斷哪些變數是唯讀狀態,請參閱變數參考資料。
參數:
httpRequest
:來自 http 模組的要求物件。name
:(字串) 要擷取的變數名稱。value
:可以是數字、字串、布林值、空值或未定義。
範例:
var apigee = require('apigee-access'); apigee.setVariable(request, 'TestVariable', 'bar'); // This will throw an exception because client.ip is read-only. apigee.setVariable(request, 'client.ip');
setIntVariable
setIntVariable(httpRequest, name, value);
setIntVariable() 方法是一種便利方法,先將 value 參數強制轉換為整數,然後設定該方法。
參數:
httpRequest
:來自 http 模組的要求物件。name
:(字串) 要設定的變數名稱。value
:值參數必須是字串或數字。
範例:
var apigee = require('apigee-access'); // Convert "123" to an integer and set it apigee.setIntVariable(request, 'TestVariable', '123'); // Use something that's already a number apigee.setIntVariable(request, 'TestVariable2', 42);
deleteVariable
刪除具名變數。刪除唯讀變數會發生錯誤。如需唯讀變數的完整清單,請參閱變數參考資料。
deleteVariable(httpRequest, name);
參數:
httpRequest
:來自 http 模組的要求物件。name
:(字串) 要刪除的變數名稱。
範例:
apigee.deleteVariable(request, 'TestVariable'); // This will throw an exception because client.ip is a read-only variable. apigee.deleteVariable(request, 'client.ip');