นโยบาย JavaScript

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

อะไร

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

เกี่ยวกับ

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

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

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

ไฟล์ต้นฉบับ JavaScript ต้องมีส่วนขยาย .js เสมอ

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

วิดีโอ

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

ลองฟัง

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

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

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

  1. ใน Edge UI ให้เปิดพร็อกซีที่คุณสร้างไว้ในเครื่องมือแก้ไขพร็อกซี
  2. เลือกแท็บพัฒนา
  3. เลือกสคริปต์ใหม่จากเมนู "ใหม่"
  4. ในกล่องโต้ตอบ ให้เลือก JavaScript แล้วตั้งชื่อสคริปต์ เช่น js-example
  5. วางโค้ดต่อไปนี้ลงในตัวแก้ไขโค้ด และบันทึกพร็อกซี สิ่งสำคัญที่ควรสังเกตคือออบเจ็กต์ context ออบเจ็กต์นี้พร้อมใช้งานสำหรับโค้ด JavaScript ที่ใดก็ได้ในโฟลว์พร็อกซี ใช้เพื่อรับค่าคงที่เฉพาะโฟลว์ เพื่อเรียกใช้เมธอด get/set ที่มีประโยชน์ และสำหรับการดำเนินการเพิ่มเติม ส่วนออบเจ็กต์นี้คือโมเดลออบเจ็กต์ JavaScript ของ Edge โปรดทราบด้วยว่าตัวแปรโฟลว์ target.url เป็นตัวแปรแบบอ่าน/เขียนในตัวที่เข้าถึงได้ในขั้นตอนคำขอเป้าหมาย เมื่อเราตั้งค่าตัวแปรนั้นด้วย URL ของ API แล้ว Edge จะเรียกใช้แบ็กเอนด์ไปยัง 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. หากเลือกโฟลว์ปลายทางพร็อกซีใน Navigator คุณจะเห็นว่ามีการเพิ่มนโยบายลงในขั้นตอนนั้นแล้ว
  9. ใน Navigator ให้เลือกไอคอน Target Endpoint PreFlow
  10. จาก Navigator ให้ลากนโยบาย 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 เพื่อให้การดำเนินการโฟลว์ดำเนินต่อไปได้แม้ว่านโยบายจะล้มเหลวก็ตาม

false ไม่บังคับ
enabled

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

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

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

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

false เลิกใช้

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

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

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

ไม่มีข้อมูล

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

การมีบุคคลอยู่ ไม่บังคับ
Type สตริง

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

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

รวมทรัพยากรทรัพยากร Dependency ของ 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 หรือในส่วนสคริปต์ของแผงการนำทางของเครื่องมือแก้ไขพร็อกซี 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() เพื่อแสดงข้อมูลการแก้ไขข้อบกพร่องไปยังแผงเอาต์พุตธุรกรรมในเครื่องมือติดตาม โปรดดูรายละเอียดและตัวอย่างที่หัวข้อ "แก้ไขข้อบกพร่องด้วยคำสั่ง print()" ของ JavaScript

หากต้องการดูใบแจ้งยอดสิ่งพิมพ์ใน Trace:

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

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

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

ตัวแปรของโฟลว์

นโยบายนี้ไม่ได้ป้อนข้อมูลตัวแปรใดๆ โดยค่าเริ่มต้น แต่คุณตั้งค่า (และรับ) ตัวแปรโฟลว์ในโค้ด 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 ดูรายละเอียดได้ในสตริง Fault ไม่มีข้อมูล

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

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

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
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