دسترسی به متغیرهای جریان در Node.js

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

مقدمه

از ماژول 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/');

می توانید این کد را در یک فایل جاوا اسکریپت کپی کنید، آن را در 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

اکنون به صفحه دسترسی پراکسی در رابط کاربری مدیریت بروید و نمای Develop را باز کنید. برای مشاهده خروجی گزارش از پروکسی، روی Node.js Logs کلیک کنید. اگر پروکسی به درستی پیکربندی شده باشد، خواهید دید که متغیر 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()، زمانی که توسط شما در جای دیگری ایجاد شد، یا زمانی که یک خط مشی آن را ایجاد کرد. اگر به یکی از متغیرهای خارج از جعبه 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 : (رشته) نام متغیری که باید بازیابی شود.
  • 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، نام، مقدار);

متد setIntVariable() یک روش راحت است که ابتدا پارامتر مقدار را به یک عدد صحیح وادار می کند و سپس آن را تنظیم می کند.

پارامترها:

  • 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(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');