การเข้าถึงตัวแปรโฟลว์ใน Node.js

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

บทนำ

ใช้โมดูล apigee-access เพื่อเข้าถึงตัวแปร โฟลว์ ของ Apigee Edge ในแอปพลิเคชัน Node.js โมดูลนี้มีเมธอดสำหรับรับ ตั้งค่า และลบตัวแปร นอกจากนี้ยังมีเมธอดที่สะดวกสำหรับการตั้งค่าตัวแปรจำนวนเต็ม

ตัวแปรโฟลว์จะอยู่ในบริบทของโฟลว์พร็อกซี API ตัวแปรบางตัวเป็นตัวแปร "ในตัว" ของ 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>

คุณสามารถเรียกพร็อกซีได้ดังนี้

curl -i http://myorg-test.apigee.net/access

ตอนนี้ให้ไปที่หน้าพร็อกซีการเข้าถึงใน UI การจัดการ แล้วเปิด มุมมองพัฒนา คลิกบันทึก Node.js เพื่อดูเอาต์พุตบันทึกจาก พร็อกซี หากกำหนดค่าพร็อกซีอย่างถูกต้อง คุณจะเห็นว่ามีการตั้งค่าตัวแปร 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: (String) ชื่อของตัวแปรที่จะดึงข้อมูล

ค่าที่แสดงผล:

สตริงหรือตัวเลข ขึ้นอยู่กับประเภทที่ตั้งค่าโดยใช้ setVariable() เมื่อ คุณสร้างตัวแปรดังกล่าวที่อื่น หรือเมื่อนโยบายสร้างตัวแปร หากคุณเข้าถึงตัวแปร Edge ที่มีให้ใช้งานเลย คุณจะเห็นรายการประเภทตัวแปรในข้อมูลอ้างอิงตัวแปร สำหรับประเภทตัวแปร ที่สร้างโดยนโยบาย โปรดดูหัวข้อข้อมูลอ้างอิงนโยบายที่เฉพาะเจาะจง

ตัวอย่าง:

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: (String) ชื่อของตัวแปรที่จะดึงข้อมูล
  • 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: (String) ชื่อของตัวแปรที่จะตั้งค่า
  • value: พารามิเตอร์ 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: (String) ชื่อของตัวแปรที่จะลบ

ตัวอย่าง:

  apigee.deleteVariable(request, 'TestVariable');
    // This will throw an exception because client.ip is a read-only variable.
    apigee.deleteVariable(request, 'client.ip');