นโยบาย JavaScript

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

อะไร

นโยบายนี้ช่วยให้คุณเพิ่มโค้ด JavaScript ที่กำหนดเองซึ่งจะดำเนินการภายในบริบทของโฟลว์พร็อกซี API ในโค้ด JavaScript ที่กำหนดเอง คุณสามารถใช้ออบเจ็กต์ เมธอด และพร็อพเพอร์ตี้ของรูปแบบออบเจ็กต์ JavaScript ของ Apigee Edge โมเดลออบเจ็กต์ช่วยให้คุณรับ ตั้งค่า และนำตัวแปร ในบริบทของโฟลว์พร็อกซีออกได้ นอกจากนี้ คุณยังใช้ฟังก์ชันการเข้ารหัสพื้นฐานที่มาพร้อมกับโมเดลออบเจ็กต์ได้ด้วย

เกี่ยวกับ

นโยบาย JavaScript มี Use Case มากมาย เช่น คุณสามารถรับและตั้งค่าตัวแปรโฟลว์ เรียกใช้ตรรกะที่กำหนดเองและจัดการข้อผิดพลาด ดึงข้อมูลจากคำขอหรือ การตอบกลับ แก้ไข URL เป้าหมายของแบ็กเอนด์แบบไดนามิก และอื่นๆ อีกมากมาย นโยบายนี้ช่วยให้คุณ ใช้ลักษณะการทำงานที่กำหนดเองซึ่งนโยบาย Edge มาตรฐานอื่นๆ ไม่ครอบคลุม ในความเป็นจริง คุณ สามารถใช้นโยบาย JavaScript เพื่อให้ได้ลักษณะการทำงานหลายอย่างเช่นเดียวกับที่นโยบายอื่นๆ เช่น AssignMessage และ ExtractVariable นำมาใช้

กรณีการใช้งานหนึ่งที่เราไม่แนะนำให้ใช้กับนโยบาย JavaScript คือการบันทึก นโยบายการบันทึกข้อความเหมาะสําหรับการบันทึกลงในแพลตฟอร์มการบันทึกของบุคคลที่สาม เช่น Splunk, Sumo และ Loggly มากกว่า และคุณจะปรับปรุงประสิทธิภาพของพร็อกซี API ได้ด้วยการใช้นโยบายการบันทึกข้อความใน PostClientFlow ซึ่งจะทํางานหลังจากที่ส่งการตอบกลับกลับไปยังไคลเอ็นต์แล้ว

นโยบาย JavaScript ช่วยให้คุณระบุไฟล์ต้นฉบับ JavaScript ที่จะเรียกใช้ หรือ คุณจะรวมโค้ด JavaScript ไว้ในการกำหนดค่าของนโยบายโดยตรงด้วยองค์ประกอบ <Source> ก็ได้ ไม่ว่าจะด้วยวิธีใด โค้ด JavaScript จะทำงานเมื่อขั้นตอนที่แนบนโยบายไว้ทำงาน สำหรับตัวเลือกไฟล์ต้นฉบับ ระบบจะจัดเก็บซอร์สโค้ดไว้ในตำแหน่งมาตรฐานภายในแพ็กเกจพร็อกซีเสมอ ซึ่งก็คือ apiproxy/resources/jsc หรือจะจัดเก็บซอร์สโค้ดไว้ในไฟล์ทรัพยากรที่ระดับสภาพแวดล้อมหรือองค์กรก็ได้ ดูวิธีการได้ที่ไฟล์ทรัพยากร นอกจากนี้ คุณยังอัปโหลด JavaScript ผ่านเครื่องมือแก้ไขพร็อกซีของ Apigee UI ได้ด้วย

ไฟล์แหล่งที่มาของ JavaScript ต้องมีส่วนขยาย .js เสมอ

ดูเวอร์ชัน JavaScript ที่รองรับในปัจจุบันได้ที่ซอฟต์แวร์และเวอร์ชันที่รองรับ

วิดีโอ

ดูวิดีโอสั้นๆ เพื่อดูวิธีสร้างส่วนขยายนโยบายที่กำหนดเองโดยใช้นโยบาย JavaScript

ตัวอย่าง

เขียน URL เป้าหมายใหม่

กรณีการใช้งานที่พบบ่อยคือการดึงข้อมูลจากเนื้อหาคำขอ จัดเก็บไว้ในตัวแปรโฟลว์ และใช้ตัวแปรโฟลว์นั้นในที่อื่นๆ ในโฟลว์พร็อกซี สมมติว่าคุณมีแอป ที่ผู้ใช้ป้อนชื่อในแบบฟอร์ม HTML แล้วส่ง คุณต้องการให้พร็อกซี API ดึงข้อมูลแบบฟอร์มและเพิ่มลงใน URL ที่ใช้เรียกใช้บริการแบ็กเอนด์แบบไดนามิก คุณจะทำเช่นนี้ในนโยบาย JavaScript ได้อย่างไร

หมายเหตุ: หากต้องการลองใช้ตัวอย่างนี้ เราจะถือว่าคุณได้สร้างพร็อกซีใหม่ในเครื่องมือแก้ไขพร็อกซีแล้ว เมื่อสร้างแล้ว ให้ระบุ URL ของบริการแบ็กเอนด์เป็น http://www.example.com สำหรับตัวอย่างนี้ เราจะเขียน URL ของแบ็กเอนด์ใหม่แบบไดนามิก หากไม่ทราบวิธีสร้างพร็อกซีใหม่ โปรดดูบทแนะนำการเริ่มต้นใช้งาน .

  1. ใน UI ของ Edge ให้เปิดพร็อกซีที่คุณสร้างในเครื่องมือแก้ไขพร็อกซี
  2. เลือกแท็บพัฒนา
  3. เลือกสคริปต์ใหม่จากเมนูใหม่
  4. ในกล่องโต้ตอบ ให้เลือก JavaScript และตั้งชื่อสคริปต์ เช่น js-example
  5. วางโค้ดต่อไปนี้ในตัวแก้ไขโค้ดแล้วบันทึกพร็อกซี สิ่งสำคัญที่ควรสังเกตคือcontextออบเจ็กต์ ออบเจ็กต์นี้พร้อมใช้งานกับโค้ด JavaScript ทุกที่ในโฟลว์ของพร็อกซี ใช้เพื่อรับค่าคงที่เฉพาะโฟลว์ เรียกใช้เมธอด get/set ที่มีประโยชน์ และสำหรับการดำเนินการอื่นๆ ส่วนออบเจ็กต์นี้เป็นของรูปแบบออบเจ็กต์ JavaScript ของ Edge โปรดทราบ ว่าตัวแปรโฟลว์ target.url เป็นตัวแปรบิวท์อินแบบอ่าน/เขียนที่ เข้าถึงได้ในโฟลว์คำขอเป้าหมาย เมื่อเราตั้งค่าตัวแปรนั้นด้วย URL ของ API แล้ว Edge จะทำการเรียกแบ็กเอนด์ไปยัง URL นั้น เราได้เขียน URL เป้าหมายเดิมใหม่ ซึ่งเป็น URL ที่คุณระบุเมื่อสร้างพร็อกซี (เช่น http://www.example.com)

    if (context.flow=="PROXY_REQ_FLOW") {
         var username = context.getVariable("request.formparam.user");
         context.setVariable("info.username", username);
    }
    
    
    if (context.flow=="TARGET_REQ_FLOW") {
         context.setVariable("request.verb", "GET");
         var name = context.getVariable("info.username");
         var url = "http://mocktarget.apigee.net/"
         context.setVariable("target.url", url + "?user=" + name);
    }
  6. เลือก JavaScript จากเมนู "นโยบายใหม่"
  7. ตั้งชื่อนโยบาย เช่น target-rewrite ยอมรับค่าเริ่มต้นและบันทึก นโยบาย
  8. หากเลือก Preflow ของพร็อกซีปลายทางในแถบนำทาง คุณจะเห็นว่ามีการเพิ่มนโยบาย ลงในโฟลว์นั้น
  9. ในแถบนำทาง ให้เลือกไอคอน Target Endpoint PreFlow
  10. จากแถบนำทาง ให้ลากนโยบาย JavaScript ไปยังด้านคำขอของปลายทางเป้าหมายในเครื่องมือแก้ไขโฟลว์
  11. บันทึก
  12. เรียก API ดังนี้ โดยแทนที่ชื่อองค์กรและชื่อพร็อกซีที่ถูกต้องตามความเหมาะสม:
curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST -d 'user=Will' http://myorg-test.apigee.net/js-example

สุดท้ายนี้ เรามาดูคำจำกัดความ XML สำหรับนโยบาย JavaScript ที่ใช้ใน ตัวอย่างนี้กัน สิ่งสำคัญที่ควรทราบคือระบบจะใช้องค์ประกอบ <ResourceURL> เพื่อระบุไฟล์ต้นฉบับ JavaScript ที่จะดำเนินการ รูปแบบเดียวกันนี้ใช้ สำหรับไฟล์แหล่งที่มา JavaScript ใดๆ: jsc://filename.js หากโค้ด JavaScript ของคุณ ต้องมีการรวม คุณสามารถใช้องค์ประกอบ <IncludeURL> อย่างน้อย 1 รายการเพื่อทำ เช่นนั้นได้ตามที่อธิบายไว้ในข้อมูลอ้างอิงนี้ในภายหลัง

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="target-rewrite">
    <DisplayName>target-rewrite</DisplayName>
    <Properties/>
    <ResourceURL>jsc://js-example.js</ResourceURL>
</Javascript>

ดึงค่าพร็อพเพอร์ตี้จาก JavaScript

คุณเพิ่มองค์ประกอบ <Property> ในการกำหนดค่าได้ จากนั้นเรียกค่าขององค์ประกอบ ด้วย JavaScript ในช่วงรันไทม์

ใช้แอตทริบิวต์ name ขององค์ประกอบเพื่อระบุชื่อที่จะใช้เข้าถึงพร็อพเพอร์ตี้ จากโค้ด JavaScript ค่าขององค์ประกอบ <Property> (ค่าระหว่างแท็กเปิดและปิด) คือค่าตามตัวอักษรที่ JavaScript จะได้รับ

ใน JavaScript คุณจะดึงค่าพร็อพเพอร์ตี้ของนโยบายได้โดยการเข้าถึงเป็นพร็อพเพอร์ตี้ของออบเจ็กต์ Properties ดังตัวอย่างต่อไปนี้

  • กำหนดค่าพร็อพเพอร์ตี้ ในที่นี้ ค่าพร็อพเพอร์ตี้คือชื่อตัวแปร response.status.code
    <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="JavascriptURLRewrite">
        <DisplayName>JavascriptURLRewrite</DisplayName>
        <Properties>
            <Property name="source">response.status.code</Property>
        </Properties>
        <ResourceURL>jsc://JavascriptURLRewrite.js</ResourceURL>
    </Javascript>
  • เรียกข้อมูลพร็อพเพอร์ตี้ด้วย JavaScript ในที่นี้ ระบบจะใช้ค่าที่ดึงมา ซึ่งก็คือชื่อตัวแปร โดยฟังก์ชัน getVariable เพื่อดึงค่าของตัวแปร
    var responseCode = properties.source; // Returns "response.status.code"
    var value = context.getVariable(responseCode); // Get the value of response.status.code
    context.setVariable("response.header.x-target-response-code", value);

การจัดการข้อผิดพลาด

ดูตัวอย่างและการสนทนาเกี่ยวกับเทคนิคการจัดการข้อผิดพลาดที่คุณใช้ในการเรียกใช้ JavaScript ได้ที่ โพสต์นี้ในชุมชน Apigee คำแนะนำที่เสนอในชุมชน Apigee มีไว้เพื่อ ให้ข้อมูลเท่านั้น และไม่จำเป็นต้องเป็นแนวทางปฏิบัติแนะนำที่ Apigee แนะนำ


การอ้างอิงองค์ประกอบ

การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย JavaScript

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Javascript async="false"
        continueOnError="false" enabled="true" timeLimit="200"
        name="JavaScript-1">
    <DisplayName>JavaScript 1</DisplayName>
    <Properties>
        <Property name="propName">propertyValue</Property>
    </Properties>
    <SSLInfo>
        <Enabled>trueFalse</Enabled>
        <ClientAuthEnabled>trueFalse</ClientAuthEnabled>
        <KeyStore>ref://keystoreRef</KeyStore>
        <KeyAlias>keyAlias</KeyAlias>
        <TrustStore>ref://truststoreRef</TrustStore>
    </SSLInfo>
    <IncludeURL>jsc://a-javascript-library-file</IncludeURL>
    <ResourceURL>jsc://my-javascript-source-file</ResourceURL>
    <Source>insert_js_code_here</Source>

</Javascript>

แอตทริบิวต์ <Javascript>

<Javascript name="Javascript-1" enabled="true" continueOnError="false" async="false" timeLimit="200">

แอตทริบิวต์ต่อไปนี้เป็นแอตทริบิวต์เฉพาะสำหรับนโยบายนี้

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
timeLimit

ระบุเวลาสูงสุด (เป็นมิลลิวินาที) ที่สคริปต์ได้รับอนุญาตให้ ดำเนินการ เช่น หากเกินขีดจำกัด 200 มิลลิวินาที นโยบายจะแสดงข้อผิดพลาดนี้ Javascript.policy_name failed with error: Javascript runtime exceeded limit of 200ms

หมายเหตุ: สำหรับบัญชีทดลองใช้ฟรี ระบบจะจำกัดเวลาในการดำเนินการไว้ที่ 200 มิลลิวินาที

ไม่มี ต้องระบุ

ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
name

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name สามารถ ประกอบด้วยตัวอักษร ตัวเลข การเว้นวรรค ขีดกลางสั้น ขีดล่าง และจุด ค่านี้ไม่สามารถ เกิน 255 อักขระ

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

ไม่มี ต้องระบุ
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ พฤติกรรมสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้ดำเนินการตามขั้นตอนได้อย่างต่อเนื่องแม้จะมีนโยบายแล้วก็ตาม ล้มเหลว

เท็จ ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย นโยบายจะไม่ บังคับใช้ แม้ว่าจะยังคงแนบกับขั้นตอน

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

เท็จ เลิกใช้

&lt;DisplayName&gt; องค์ประกอบ

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มี

หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ name ของนโยบายจะเป็น

การมีบุคคลอยู่ ไม่บังคับ
ประเภท สตริง

องค์ประกอบ <IncludeURL>

ระบุไฟล์ไลบรารี JavaScript ที่จะโหลดเป็นทรัพยากร Dependency ไปยังไฟล์ JavaScript หลัก ที่ระบุด้วยองค์ประกอบ <ResourceURL> หรือ <Source> ระบบจะประเมินสคริปต์ตามลำดับที่ระบุไว้ในนโยบาย โค้ดของคุณสามารถใช้ออบเจ็กต์ เมธอด และพร็อพเพอร์ตี้ของโมเดลออบเจ็กต์ JavaScript

รวมทรัพยากรการอ้างอิง JavaScript มากกว่า 1 รายการที่มีองค์ประกอบ <IncludeURL> เพิ่มเติม

<IncludeURL>jsc://my-javascript-dependency.js</IncludeURL>
ค่าเริ่มต้น: ไม่มี
การแสดงตน: ไม่บังคับ
ประเภท: สตริง

ตัวอย่าง

ดูตัวอย่างพื้นฐานได้ในส่วนตัวอย่าง

องค์ประกอบ <Property>

ระบุพร็อพเพอร์ตี้ที่คุณเข้าถึงได้จากโค้ด JavaScript ในขณะรันไทม์

<Properties>
    <Property name="propName">propertyValue</Property>
</Properties>
ค่าเริ่มต้น: ไม่มี
การแสดงตน: ไม่บังคับ
ประเภท: สตริง

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ชื่อ

ระบุชื่อพร็อพเพอร์ตี้

ไม่มี ต้องระบุ

ตัวอย่าง

ดูตัวอย่างได้ในส่วนตัวอย่าง

องค์ประกอบ <ResourceURL>

ระบุไฟล์ JavaScript หลักที่จะดำเนินการในโฟลว์ API คุณสามารถจัดเก็บไฟล์นี้ ที่ขอบเขตพร็อกซี API (ใน /apiproxy/resources/jsc ในแพ็กเกจพร็อกซี API หรือใน ส่วนสคริปต์ของแผง Navigator ของเครื่องมือแก้ไขพร็อกซี API) หรือที่ขอบเขตขององค์กรหรือ สภาพแวดล้อมเพื่อนำไปใช้ซ้ำในพร็อกซี API หลายรายการ ตามที่อธิบายไว้ในไฟล์ทรัพยากร โค้ดของคุณสามารถใช้ออบเจ็กต์ เมธอด และพร็อพเพอร์ตี้ของโมเดลออบเจ็กต์ JavaScript

<ResourceURL>jsc://my-javascript.js</ResourceURL>
ค่าเริ่มต้น: ไม่มี
การแสดงตน: ต้องระบุ <ResourceURL> หรือ <Source> หากมีทั้ง <ResourceURL> และ <Source> ระบบจะไม่สนใจ <ResourceURL>
ประเภท: สตริง

ตัวอย่าง

ดูตัวอย่างพื้นฐานได้ในส่วนตัวอย่าง

องค์ประกอบ <Source>

ช่วยให้คุณแทรก JavaScript ลงในการกำหนดค่า XML ของนโยบายได้โดยตรง โค้ด JavaScript ที่แทรกจะทำงานเมื่อนโยบายทำงานในโฟลว์ API

ค่าเริ่มต้น: ไม่มี
การแสดงตน: ต้องระบุ <ResourceURL> หรือ <Source> หากมีทั้ง <ResourceURL> และ <Source> ระบบจะไม่สนใจ <ResourceURL>
ประเภท: สตริง

ตัวอย่าง

<Javascript name='JS-ParseJsonHeaderFullString' timeLimit='200' >
  <Properties>
    <Property name='inboundHeaderName'>specialheader</Property>
    <Property name='outboundVariableName'>json_stringified</Property>
  </Properties>
  <Source>
var varname = 'request.header.' + properties.inboundHeaderName + '.values.string';
var h = context.getVariable(varname);
if (h) {
  h = JSON.parse(h);
  h.augmented = (new Date()).valueOf();
  var v = JSON.stringify(h, null, 2) + '\n';
  // further indent
  var r = new RegExp('^(\S*)','mg');
  v= v.replace(r,'    $1');
  context.setVariable(properties.outboundVariableName, v);
}
  </Source>
</Javascript>

องค์ประกอบ <SSLInfo>

ระบุพร็อพเพอร์ตี้ที่ใช้ในการกำหนดค่า TLS สำหรับอินสแตนซ์ไคลเอ็นต์ HTTP ทั้งหมดที่สร้างขึ้นโดย นโยบาย JavaScript

    <SSLInfo>
        <Enabled>trueFalse</Enabled>
        <ClientAuthEnabled>trueFalse</ClientAuthEnabled>
        <KeyStore>ref://keystoreRef</KeyStore>
        <KeyAlias>keyAlias</KeyAlias>
        <TrustStore>ref://truststoreRef</TrustStore>
    </SSLInfo>
ค่าเริ่มต้น: ไม่มี
การแสดงตน: ไม่บังคับ
ประเภท: สตริง

กระบวนการกำหนดค่า TLS สำหรับไคลเอ็นต์ HTTP เป็นกระบวนการเดียวกันกับที่คุณใช้กำหนดค่า TLS สำหรับ TargetEndpoint/TargetServer ดูข้อมูลเพิ่มเติมได้ที่การกำหนดค่า TLS จาก Edge ไปยังแบ็กเอนด์

หมายเหตุการใช้งาน

นโยบาย JavaScript ไม่มีโค้ดจริง แต่นโยบาย JavaScript จะอ้างอิงถึง "ทรัพยากร" JavaScript และกำหนดขั้นตอนในโฟลว์ API ที่ JavaScript ทำงาน คุณสามารถ อัปโหลดสคริปต์ผ่านเครื่องมือแก้ไขพร็อกซีของ UI การจัดการ หรือจะรวมไว้ใน ไดเรกทอรี /resources/jsc ในพร็อกซี API ที่คุณพัฒนาในเครื่องก็ได้

การแก้ไขข้อบกพร่องของโค้ดนโยบาย JavaScript

ใช้ฟังก์ชัน print() เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องไปยังแผงเอาต์พุตของธุรกรรม ในเครื่องมือติดตาม ดูรายละเอียดและตัวอย่างได้ที่การแก้ไขข้อบกพร่องด้วยคำสั่ง JavaScript print()

วิธีดูคำสั่งพิมพ์ใน Trace

  1. เปิดเครื่องมือติดตามและเริ่มเซสชันการติดตามสำหรับพร็อกซีที่มีนโยบาย JavaScript
  2. โทรหาพร็อกซี
  3. ในเครื่องมือติดตาม ให้คลิกเอาต์พุตจากธุรกรรมทั้งหมดเพื่อเปิดแผงเอาต์พุต

  4. ใบแจ้งยอดที่พิมพ์จะปรากฏในแผงนี้

คุณสามารถใช้ฟังก์ชัน print() เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องในเครื่องมือติดตาม ฟังก์ชันนี้พร้อมใช้งานโดยตรง ผ่านโมเดลออบเจ็กต์ JavaScript ดูรายละเอียดได้ที่ "แก้ไขข้อบกพร่องของ JavaScript ด้วยคำสั่ง print()"

ตัวแปรโฟลว์

นโยบายนี้จะไม่สร้างตัวแปรใดๆ โดยค่าเริ่มต้น แต่คุณสามารถตั้งค่า (และรับ) ตัวแปรโฟลว์ ในโค้ด JavaScript ได้โดยการเรียกใช้เมธอดในออบเจ็กต์บริบท รูปแบบทั่วไป มีลักษณะดังนี้

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"))

ออบเจ็กต์บริบทเป็นส่วนหนึ่งของรูปแบบออบเจ็กต์ JavaScript ของ Apigee Edge

ข้อมูลอ้างอิงข้อผิดพลาด

ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่ส่งกลับและตัวแปรข้อบกพร่อง ที่ Edge กำหนดไว้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้สำคัญที่ควรทราบ หากคุณพัฒนากฎความผิด จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด สถานะ HTTP สาเหตุ แก้ไข
steps.javascript.ScriptExecutionFailed 500 นโยบาย JavaScript สามารถแสดงข้อผิดพลาด ScriptExecutionFailed ประเภทต่างๆ ได้ พบได้ทั่วไป ประเภทข้อผิดพลาดที่เห็น ได้แก่ RangeError ReferenceError, SyntaxError TypeError และ URIError
steps.javascript.ScriptExecutionFailedLineNumber 500 เกิดข้อผิดพลาดในโค้ด JavaScript ดูรายละเอียดจากสตริงข้อผิดพลาด ไม่มี
steps.javascript.ScriptSecurityError 500 เกิดข้อผิดพลาดด้านความปลอดภัยขณะเรียกใช้ JavaScript ดูสตริงข้อผิดพลาดสำหรับ รายละเอียด ไม่มี

ข้อผิดพลาดในการทำให้ใช้งานได้

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
InvalidResourceUrlFormat หากรูปแบบของ URL ทรัพยากรที่ระบุภายในองค์ประกอบ <ResourceURL> หรือ <IncludeURL> ของนโยบาย JavaScript ไม่ถูกต้อง การทำให้พร็อกซี API ใช้งานได้จะล้มเหลว
InvalidResourceUrlReference หากองค์ประกอบ <ResourceURL> หรือ <IncludeURL> อ้างอิงไฟล์ JavaScript ที่ไม่มีอยู่ การติดตั้งใช้งานพร็อกซี API จะล้มเหลว ไฟล์แหล่งที่มาที่อ้างอิงต้องมีอยู่ในพร็อกซี API, สภาพแวดล้อม หรือองค์กร
WrongResourceType ข้อผิดพลาดนี้เกิดขึ้นระหว่างการทำให้ใช้งานได้หาก <ResourceURL> หรือ <IncludeURL> องค์ประกอบของนโยบาย JavaScript หมายถึงประเภททรัพยากรใดๆ ที่ไม่ใช่ jsc (ไฟล์ JavaScript)
NoResourceURLOrSource การทำให้นโยบาย JavaScript ใช้งานได้อาจล้มเหลวด้วยข้อผิดพลาดนี้ หาก <ResourceURL> ไม่มีการประกาศองค์ประกอบ หรือไม่มีการระบุ URL ทรัพยากรภายในองค์ประกอบนี้ องค์ประกอบ <ResourceURL> เป็นองค์ประกอบที่จำเป็น หรือประกาศเอลิเมนต์ <IncludeURL> แต่ URL ของทรัพยากรไม่ได้กำหนดไว้ภายในองค์ประกอบนี้ องค์ประกอบ <IncludeURL> เป็นค่าที่ไม่บังคับ แต่หากมีการประกาศไว้ คุณต้องระบุ URL ทรัพยากรภายในองค์ประกอบ <IncludeURL>

ตัวแปรความผิดพลาด

ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทำให้เกิดข้อผิดพลาดขณะรันไทม์ สำหรับข้อมูลเพิ่มเติม ดูสิ่งที่คุณ ที่ต้องทราบเกี่ยวกับข้อผิดพลาดด้านนโยบาย

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด fault.name Matches "ScriptExecutionFailed"
javascript.policy_name.failed policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด javascript.JavaScript-1.failed = true

ตัวอย่างการตอบสนองข้อผิดพลาด

{
  "fault": {
    "faultstring": "Execution of SetResponse failed with error: Javascript runtime error: "ReferenceError: "status" is not defined. (setresponse.js:6)\"",
    "detail": {
      "errorcode": "steps.javascript.ScriptExecutionFailed"
    }
  }
}

ตัวอย่างกฎข้อผิดพลาด

<FaultRule name="JavaScript Policy Faults">
    <Step>
        <Name>AM-CustomErrorResponse</Name>
        <Condition>(fault.name Matches "ScriptExecutionFailed") </Condition>
    </Step>
    <Condition>(javascript.JavaScript-1.failed = true) </Condition>
</FaultRule>

สคีมา

นโยบายแต่ละประเภทกำหนดโดยสคีมา XML (.xsd) โดยคุณดูสคีมานโยบาย ได้ใน GitHub

หัวข้อที่เกี่ยวข้อง

บทความในชุมชน Apigee

คุณดูบทความที่เกี่ยวข้องเหล่านี้ได้ในชุมชน Apigee