นโยบาย JavaScript

คุณกําลังดูเอกสาร Apigee Edge
ดูเอกสารประกอบเกี่ยวกับ Apigee X

อะไร

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

เกี่ยวกับ

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

กรณีการใช้งานหนึ่งที่เราไม่แนะนําให้ใช้กับนโยบาย JavaScript คือการบันทึก นโยบายการบันทึกข้อความเหมาะอย่างยิ่งสําหรับการบันทึกไปยังแพลตฟอร์มการบันทึกของบุคคลที่สาม เช่น Splunk, Sumo และ Loggly และช่วยปรับปรุงประสิทธิภาพพร็อกซี API ด้วยการใช้นโยบาย Logging ข้อความใน 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 เป้าหมายเดิมใหม่ ซึ่งเป็น 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">

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

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

ระบุเวลาสูงสุด (หน่วยเป็นมิลลิวินาที) ที่สคริปต์ได้รับอนุญาตให้เรียกใช้ เช่น หากเกินขีดจํากัด 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

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

เท็จ เลิกใช้

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

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

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

ไม่มีข้อมูล

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

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

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

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