الوصول إلى متغيرات التدفق في Node.js

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

مقدمة

استخدام وحدة apigee-access للوصول إلى مسار Apigee Edge المتغيرات في تطبيق Node.js. تتضمّن الوحدة طرق الحصول على المتغيّرات وإعدادها وحذفها. ويمكن أيضًا استخدام طريقة ملائمة لتعيين متغير عدد صحيح.

تتوفّر متغيّرات التدفق في سياق تدفّق الخادم الوكيل لواجهة برمجة التطبيقات. بعض المتغيرات "مضمنة" إلى الحافة. يتم إنشاء متغيرات أخرى عند تنفيذ السياسات، ويمكنك إنشاء المتغيرات الخاصة بك. التدفق فعادةً ما تُستخدم المتغيرات لتمرير البيانات من سياسة إلى أخرى ولإعداد الشروط في التدفقات الشرطية. للحصول على معلومات حول متغيرات التدفق، راجِع متغيرات التدفق والشروط.

للاطّلاع على مقدمة عن وحدة apigee-access وميزاتها الأخرى، يُرجى مراجعة استخدام وحدة الوصول إلى واجهة برمجة التطبيقات (apigee):

مثال على العمل

تخيل أن سياسة 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

انتقِل الآن إلى صفحة خادم وكيل الوصول في واجهة مستخدم الإدارة وأظهر تطوير طريقة العرض. انقر على سجلات 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 غير الجاهزة، يمكنك العثور على قائمة بالأنواع في Variables Reference (مرجع المتغيرات). لأنواع المتغيّرات التي أنشأتها السياسات، يمكنك الرجوع إلى الموضوع المرجعي المحدد للسياسة.

أمثلة:

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