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

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

مقدمه

از واحد apigee-access برای دسترسی به متغیرهای جریان Apigee Edge در برنامه Node.js استفاده کنید. این واحد دارای روش‌هایی برای دریافت، تنظیم، و حذف متغیرها است. همچنین روشی آسان برای تنظیم متغیر عدد صحیح دارد.

متغیرهای Flow در بافت جریان پراکسی API وجود دارند. برخی‌از متغیرها در Edge «ساخته شده‌اند». متغیرهای دیگر هنگام اجرای خط‌مشی‌ها ایجاد می‌شوند و می‌توانید متغیرهای خودتان را ایجاد کنید. متغیرهای Flow معمولاً برای انتقال داده‌ها از یک خط‌مشی به خط‌مشی دیگر و برای تنظیم شرایط در جریان‌های شرطی استفاده می‌شوند. برای کسب اطلاعات درباره متغیرهای جریان، متغیرهای جریان و شرایط را ببینید.

برای آشنایی با واحد 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

اکنون به صفحه پراکسی دسترسی در واسط کاربر مدیریت بروید و نمای توسعه را بالا بیاورید. برای مشاهده برونداد گزارش از پراکسی، روی گزارش‌های 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: (رشته) نام متغیری که باید بازیابی شود.

برگرداندن:

رشته یا عدد، بسته به نوعی که بااستفاده از 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, name, value);

متد 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

متغیر نام‌گذاری‌شده‌ای را حذف می‌کند. حذف متغیر فقط خواندنی خطا است. برای فهرست کامل متغیرهای فقط خواندنی، مرجع متغیرها را ببینید.

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