আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
স্ক্রিপ্ট এক্সিকিউশন ব্যর্থ হয়েছে
ত্রুটি কোড
steps.javascript.ScriptExecutionFailed
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault": {
"faultstring": "Execution of javascript_policy_name failed with error: error_type: error_description. (javascript_source_file_name)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
ত্রুটির প্রকারভেদ এবং সম্ভাব্য কারণসমূহ
জাভাস্ক্রিপ্ট পলিসি বিভিন্ন ধরনের ScriptExecutionFailed এরর দেখাতে পারে। সচরাচর দেখা যায় এমন কিছু এরর নিচের টেবিলে তালিকাভুক্ত করা হলো:
| ত্রুটির ধরণ | কারণ |
| পরিসীমা ত্রুটি | অনুমোদিত মানের পরিসরের বাইরে কোনো সংখ্যা ব্যবহার করলে একটি RangeError প্রদর্শিত হয়। |
| রেফারেন্স ত্রুটি | যদি আপনি এমন কোনো ভেরিয়েবল ব্যবহার (রেফারেন্স) করেন যা ডিক্লেয়ার করা হয়নি, তাহলে একটি ReferenceError থ্রো করা হয়। |
| সিনট্যাক্স ত্রুটি | সিনট্যাক্স ত্রুটিসহ কোনো কোড মূল্যায়ন করার চেষ্টা করলে একটি SyntaxError প্রদর্শিত হয়। |
| টাইপ ত্রুটি | প্রত্যাশিত টাইপের পরিসরের বাইরে কোনো অপারেশন ব্যবহার করলে একটি TypeError থ্রো করা হয়। |
| ইউআরআই ত্রুটি | URI ফাংশনে অবৈধ অক্ষর ব্যবহার করলে একটি URIError থ্রো করা হয়। |
পরিসরের ত্রুটি
যখন আপনি অনুমোদিত মানের সেট বা পরিসরের বাইরে কোনো মানের উপর কাজ করেন বা কোনো ফাংশনে সেই মান পাঠান, তখন RangeError ত্রুটিটি প্রদর্শিত হয়।
উদাহরণস্বরূপ, নিম্নলিখিত পরিস্থিতিতে এই ত্রুটিটি দেখা দেয়:
- কিছু ডেট এপিআই-এর ক্ষেত্রে যদি আপনি ৩১শে সেপ্টেম্বর ২০১৮-এর মতো কোনো অবৈধ তারিখ ব্যবহার করেন।
- আপনি যদি
Number.toPrecision(),Number.tofixed(), বাNumber.toExponential()এর মতো নিউমেরিক মেথডগুলিতে একটি অবৈধ মান পাস করেন। উদাহরণস্বরূপ, ধরুন আপনিNumber.toPrecision()মেথডে 400 বা 500 এর মতো একটি বড় মান পাস করেছেন, তাহলে আপনি একটি রেঞ্জ এরর দেখতে পাবেন। - যদি আপনি অবৈধ দৈর্ঘ্যের একটি অ্যারে তৈরি করেন
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault": {
"faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"RangeError: error_description. (javascript_source_file_name:line_number)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
দ্রষ্টব্য: রেঞ্জ এররের নির্ণয় ও সমাধান জাভাস্ক্রিপ্ট পলিসি দ্বারা প্রদর্শিত সুনির্দিষ্ট এরর মেসেজের উপর নির্ভর করে। আপনার অবগতির জন্য নিচে কয়েকটি উদাহরণ বর্ণনা করা হলো।
উদাহরণ ১: অবৈধ তারিখ
ত্রুটির প্রতিক্রিয়ার উদাহরণ বডি
{
"fault": {
"faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
রোগ নির্ণয়
জাভাস্ক্রিপ্ট পলিসি, এর সোর্স ফাইল, যে লাইনে ত্রুটি ঘটেছে তার লাইন নম্বর এবং ত্রুটির বিবরণ শনাক্ত করুন। আপনি এই সমস্ত তথ্য এরর রেসপন্সের
faultstringএলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিতfaultstringএ, জাভাস্ক্রিপ্ট পলিসির নাম হলোParseDate, জাভাস্ক্রিপ্ট সোর্স ফাইল হলোParseDate.js, যে লাইনে ত্রুটি ঘটেছে তার লাইন নম্বর হলো2এবং ত্রুটির বিবরণ হলোDate is invalid।"faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\""(উপরে ধাপ #১-এ চিহ্নিত) জাভাস্ক্রিপ্ট সোর্স ফাইলটি পরীক্ষা করুন এবং যাচাই করুন যে ত্রুটিতে উল্লেখিত লাইন নম্বরে কোনো অবৈধ তারিখ ব্যবহার করা হয়েছে কিনা, অথবা ওই লাইন নম্বরে ব্যবহৃত ভেরিয়েবলটির তারিখটি অবৈধ কিনা। যদি একটি অবৈধ তারিখ ব্যবহার করা হয়ে থাকে, তাহলে সেটিই এই ত্রুটির কারণ।
এখানে একটি নমুনা জাভাস্ক্রিপ্ট সোর্স ফাইল দেওয়া হলো, যার ফলে এই ত্রুটিটি ঘটে:
ParseDate.js
var date = new Date('2018-09-31T11:19:08.402Z'); date.toISOString();এই উদাহরণে, ২ নম্বর লাইনে '
dateনামের একটি ভ্যারিয়েবল ব্যবহার করা হয়েছে। সোর্স ফাইলটি পরীক্ষা করলে আপনি দেখতে পাবেন যে, 'dateভ্যারিয়েবলটিতে একটি অবৈধ তারিখ সেট করা আছে:2018-09-31T11:19:08.402Z.এই তারিখটি অবৈধ, কারণ সেপ্টেম্বরে ৩১ দিন থাকে না।দ্রষ্টব্য: এই উদাহরণে ব্যবহৃত ISO-8601 ফরম্যাটটি হলো:
YYYY-MM-DDTHH:mm:ss.sssZ
সমাধান
জাভাস্ক্রিপ্ট কোডে ডেট এপিআই (Date API) ব্যবহার করার সময় সর্বদা একটি বৈধ তারিখ ব্যবহার করা নিশ্চিত করুন।
উপরে দেখানো উদাহরণ জাভাস্ক্রিপ্ট কোডটি ঠিক করতে, আপনি নিচে দেখানো অনুযায়ী তারিখটি Sept 30 2018 হিসেবে সেট করতে পারেন:
var date = new Date('2018-09-30T11:19:08.402Z');
date.toISOString();
উদাহরণ ২: প্রিসিশন এপিআই-তে ভুল নম্বর দেওয়া হয়েছে
ত্রুটির প্রতিক্রিয়ার উদাহরণ বডি
{
"fault": {
"faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
রোগ নির্ণয়
জাভাস্ক্রিপ্ট পলিসি, এর সোর্স ফাইল, যে লাইনে ত্রুটি ঘটেছে তার লাইন নম্বর এবং ত্রুটির বিবরণ শনাক্ত করুন। আপনি এই সমস্ত তথ্য এরর রেসপন্সের
faultstringএলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিতfaultstringএ, জাভাস্ক্রিপ্ট পলিসির নাম হলোSetNumberPrecision, জাভাস্ক্রিপ্ট সোর্স ফাইল হলোSetNumberPrecision.js, যে লাইনে ত্রুটি ঘটেছে তার লাইন নম্বর হলো `2` এবং ত্রুটির বিবরণ হলোPrecision 400 out of range."faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""জাভাস্ক্রিপ্ট সোর্স ফাইলটি (উপরে ধাপ #১-এ চিহ্নিত) পরীক্ষা করুন। যদি ত্রুটির বিবরণের অংশ হিসাবে উল্লিখিত বড় সংখ্যাটি নির্দিষ্ট লাইন নম্বরে ব্যবহৃত হয়, তাহলে সেটাই ত্রুটির কারণ।
এখানে একটি নমুনা জাভাস্ক্রিপ্ট সোর্স ফাইল দেওয়া হলো, যার ফলে এই ত্রুটিটি ঘটে:
SetNumberPrecision.js
var number = 12.3456; var rounded_number = number.toPrecision(400); print("rounded_number = " + rounded_number);এই উদাহরণে, লক্ষ্য করুন যে ২ নম্বর লাইনে ৪০০-এর মতো একটি বড় মান ব্যবহার করা হয়েছে। যেহেতু আপনি প্রিসিশন এত বেশি সংখ্যক ডিজিটে সেট করতে পারবেন না, তাই আপনি নিচের এররটি পাবেন:
"faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
সমাধান
নিশ্চিত করুন যে toPrecision() মেথডে ব্যবহৃত সংখ্যাটি অনুমোদিত মানগুলোর সেটের মধ্যে রয়েছে।
উপরে বর্ণিত উদাহরণ জাভাস্ক্রিপ্টের সমস্যাটি সমাধান করতে, সার্থক অঙ্কের সংখ্যা ২-এ সেট করুন, যা বৈধ:
var number = 12.3456;
var rounded_number = number.toPrecision(2);
print("rounded_number = " + rounded_number);
রেফারেন্স ত্রুটি
আপনার জাভাস্ক্রিপ্টে কোনো অনির্ধারিত ভেরিয়েবল ব্যবহৃত (রেফারেন্স) বা তার উপর কোনো অপারেশন চালানো হলে ReferenceError নামক এররটি থ্রো করা হয়।
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault": {
"faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"ReferenceError: variable_name is not defined. (javascript_source_file_name:line_number)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
ত্রুটির প্রতিক্রিয়ার উদাহরণ বডি
{
"fault": {
"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
রোগ নির্ণয়
জাভাস্ক্রিপ্ট পলিসি, এর সোর্স ফাইল এবং যে লাইন নম্বরে অনির্ধারিত ভেরিয়েবলটি উল্লেখ করা হয়েছে, তা শনাক্ত করুন। আপনি এই সমস্ত তথ্য এরর রেসপন্সের
faultstring' এলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিতfaultstringএ, জাভাস্ক্রিপ্ট পলিসির নাম হলোComputeTotalPrice, সংশ্লিষ্ট সোর্স ফাইলটি হলোComputeTotalPrice.js, যে লাইন নম্বরে এররটি ঘটেছে তা হলো3এবং অনির্ধারিত ভেরিয়েবলটির নাম হলোprice."faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""জাভাস্ক্রিপ্ট সোর্স ফাইলের লাইন নম্বরটি পরীক্ষা করুন এবং যাচাই করুন যে উপরে ধাপ #১-এ চিহ্নিত অনির্ধারিত ভেরিয়েবলটি রেফারেন্স করা হচ্ছে কিনা। উদাহরণস্বরূপ, নিম্নলিখিত জাভাস্ক্রিপ্ট কোডটি ৩ নং লাইনে
priceনামক অনির্ধারিত ভেরিয়েবলটিকে রেফারেন্স করে, যা 'faultstring'-এর সাথে মিলে যায়:ComputeTotalPrice.js
var item = context.getVariable("request.queryparam.item"); var quantity = context.getVariable("request.queryparam.quantity"); var totalprice = parseInt(quantity) * parseInt(price); context.setVariable("TotalPrice", totalprice);জাভাস্ক্রিপ্ট কোডের মধ্যে নির্দিষ্ট ভেরিয়েবলটি সংজ্ঞায়িত করা আছে কিনা তা পরীক্ষা করুন। যদি ভেরিয়েবলটি সংজ্ঞায়িত না থাকে, তাহলে সেটাই ত্রুটির কারণ।
উপরে দেখানো উদাহরণ স্ক্রিপ্টটিতে, অঘোষিত/অসংজ্ঞায়িত
priceভেরিয়েবল ব্যবহার করা হয়েছে; তাই, আপনি নিচের ত্রুটিটি দেখতে পাবেন:"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
সমাধান
জাভাস্ক্রিপ্ট কোডে উল্লেখিত সমস্ত ভেরিয়েবল সঠিকভাবে সংজ্ঞায়িত করা হয়েছে কিনা তা নিশ্চিত করুন।
উপরে দেখানো উদাহরণ জাভাস্ক্রিপ্টের সমস্যাটি সমাধান করতে, `price` ভেরিয়েবলটি ব্যবহার করার আগে সংজ্ঞায়িত করুন। উদাহরণস্বরূপ:
var item = context.getVariable("request.queryparam.item");
var quantity = context.getVariable("request.queryparam.quantity");
var price = context.getVariable("request.queryparam.price");
var totalprice = parseInt(quantity) * parseInt(price);
context.setVariable("TotalPrice", totalprice);
সিনট্যাক্স ত্রুটি
SyntaxError ত্রুটিটি তখন ঘটে যখন জাভাস্ক্রিপ্ট ইঞ্জিন এমন টোকেন বা টোকেনের ক্রম খুঁজে পায় যা ভাষার সিনট্যাক্স মেনে চলে না, অথবা যখন JSON/XML পার্সের মতো পার্সার API-গুলিতে একটি অবৈধ ফরম্যাটের ইনপুট পাঠানো হয়।
উদাহরণস্বরূপ, জাভাস্ক্রিপ্ট পলিসির মধ্যে ব্যবহৃত JSON.parse API-তে ইনপুট হিসেবে যদি কোনো অবৈধ বা ত্রুটিপূর্ণ JSON পেলোড পাঠানো হয়, তাহলে আপনি এই ত্রুটিটি পাবেন।
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault": {
"faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"SyntaxError: error_description. (javascript_source_file_name:line_number)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
ত্রুটির প্রতিক্রিয়ার উদাহরণ বডি
{
"fault": {
"faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
রোগ নির্ণয়
জাভাস্ক্রিপ্ট পলিসি, এর সোর্স ফাইল, যে লাইনে ত্রুটি ঘটেছে তার লাইন নম্বর এবং ত্রুটির বিবরণ শনাক্ত করুন। আপনি এই সমস্ত তথ্য এরর রেসপন্সের
faultstringএলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিতfaultstringএ, জাভাস্ক্রিপ্ট পলিসির নাম হলোParseJSONRequest, জাভাস্ক্রিপ্ট সোর্স ফাইল হলোParseJSONRequest.js, যে লাইনে ত্রুটি ঘটেছে তার লাইন নম্বর হলো2এবং ত্রুটির বিবরণ হলোUnexpected token:`।"faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""জাভাস্ক্রিপ্ট সোর্স ফাইলের (উপরে ধাপ #১-এ চিহ্নিত) ২ নম্বর লাইনটি পরীক্ষা করুন এবং দেখুন সেখানে কী অপারেশন করা হচ্ছে। যদি
JSON.parse()ফাংশনটি এক্সিকিউট করা হয়, তবে এতে পাঠানো ইনপুট প্যারামিটারটি পরীক্ষা করুন। যদি ইনপুট প্যারামিটারটি বৈধ না হয় বা ত্রুটিপূর্ণ JSON হয়, তবে সেটিই এই ত্রুটির কারণ।এখানে একটি নমুনা জাভাস্ক্রিপ্ট কোড দেওয়া হলো, যার ফলে এই ত্রুটিটি ঘটে:
var input = context.getVariable("request.content"); var result = JSON.parse(input);এই উদাহরণে, এপিআই প্রক্সিতে পাঠানো রিকোয়েস্ট পেলোড (
request.content)JSON.parse()ফাংশনের ইনপুট হিসেবে ব্যবহৃত হয়।অনুরোধটি কীভাবে পাঠানো হয়েছিল, তা দেখানোর জন্য এখানে একটি নমুনা এপিআই কল দেওয়া হলো:
curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '<city>Bangalore</city>'উপরের অনুরোধে, এপিআই প্রক্সি
<city>Bangalore</city>-তে নিম্নলিখিত এক্সএমএল পেলোডটি পাঠানো হয়েছে।JSON.parseএপিআই একটি বৈধ JSON পাওয়ার আশা করে, কিন্তু এর পরিবর্তে একটি এক্সএমএল পেলোড পাঠানোয়, এটি নিচের ত্রুটিসহ ব্যর্থ হয়:"Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
সমাধান
জাভাস্ক্রিপ্ট কোডে ব্যবহৃত পার্স এপিআইগুলোতে সঠিক ইনপুট দেওয়া নিশ্চিত করুন।
উপরে আলোচিত নমুনা পলিসির সমস্যাটি সমাধান করতে, নিম্নরূপে একটি বৈধ JSON পেলোড অনুরোধ প্রেরণ করুন:
curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '{"city" : "Bangalore"}'
টাইপ ত্রুটি
TypeError ত্রুটিটি তখন ঘটে যখন:
- কোনো ফাংশনে প্রেরিত অপারেন্ড বা আর্গুমেন্টটি সেই অপারেটর বা ফাংশনের প্রত্যাশিত টাইপের সাথে সামঞ্জস্যপূর্ণ নয়।
- একটি ফাংশনকে null, undefined বা ভুল অবজেক্টের উপর কল করা হয়েছে।
- একটি প্রপার্টি null, undefined বা ভুল অবজেক্ট থেকে অ্যাক্সেস করা হচ্ছে।
উদাহরণস্বরূপ, একটি টাইপ এরর দেখানো হয়:
- আপনি যদি কোনো সংখ্যার উপর
toUpperCase()ফাংশনটি প্রয়োগ করার চেষ্টা করেন, তার কারণ হলোtoUpperCase()ফাংশনটি শুধুমাত্র স্ট্রিং অবজেক্টের উপরই প্রয়োগ করা যায়। - যদি আপনি কোনো null বা undefined অবজেক্ট থেকে কোনো প্রপার্টি পড়ার চেষ্টা করেন
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault": {
"faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"TypeError: error_description. (javascript_source_file_name:line_number)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
উদাহরণ ১: ভুল অবজেক্টে ফাংশন কল করা
যদি আপনি কোনো অসমর্থিত অবজেক্টের উপর ফাংশন প্রয়োগ করার চেষ্টা করেন, তাহলে আপনি এই ত্রুটিটি পাবেন। উদাহরণস্বরূপ, যদি আপনি কোনো সংখ্যার উপর toUpperCase() ফাংশনটি প্রয়োগ করার চেষ্টা করেন, তাহলে আপনি এই ত্রুটিটি পাবেন। এর কারণ হলো, toUpperCase() ফাংশনটি শুধুমাত্র স্ট্রিং অবজেক্টের উপরই প্রয়োগ করা যায়।
ত্রুটির প্রতিক্রিয়ার উদাহরণ বডি
{
"fault": {
"faultstring": "Execution of ConvertToUpperCase failed with error: Javascript runtime error: \"TypeError: Cannot find function toUpperCase in object 100. (ConvertToUpperCase.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
রোগ নির্ণয়
জাভাস্ক্রিপ্ট পলিসি, এর সোর্স ফাইল, যে লাইনে ত্রুটি ঘটেছে তার লাইন নম্বর এবং ত্রুটির বিবরণ শনাক্ত করুন। আপনি এই সমস্ত তথ্য এরর রেসপন্সের
faultstringএলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিতfaultstringএ, জাভাস্ক্রিপ্ট পলিসির নাম হলোConvertToUpperCase, সোর্স ফাইল হলোConvertToUpperCase.js, লাইন নম্বর হলো2এবং ত্রুটির বিবরণ হলো `**Cannot find function toUpperCase in object 100."faultstring": "Execution of ConvertToUpperCase failed with error: Javascript runtime error: \"TypeError: Cannot find function toUpperCase in object 100. (ConvertToUpperCase.js:2)\""ত্রুটির বিবরণ থেকে বোঝা যাচ্ছে যে, আপনি এমন একটি অবজেক্টের উপর
toUpperCase()ফাংশনটি প্রয়োগ করছেন যার সাংখ্যিক মান ১০০।জাভাস্ক্রিপ্ট সোর্স ফাইলটি পরীক্ষা করুন এবং যাচাই করুন যে আপনি ২ নম্বর লাইনে (উপরের ১ নং ধাপে চিহ্নিত)
toUpperCase()ফাংশনটি এমন কোনো অবজেক্টের উপর কল করছেন কিনা যার সাংখ্যিক মান ১০০। যদি হ্যাঁ হয়, তাহলে সেটাই ত্রুটির কারণ।এখানে একটি নমুনা জাভাস্ক্রিপ্ট সোর্স ফাইল দেওয়া হলো, যার ফলে এই ত্রুটিটি ঘটে:
ConvertToUpperCase.js
var number = 100; var result = number.toUpperCase();উপরে দেখানো জাভাস্ক্রিপ্ট কোডে,
numberভেরিয়েবলটির মান 100 সেট করা হয়েছে। এরপর number অবজেক্টটির উপরtoUpperCase()(ফাংশনটি কল করা হয়েছে। যেহেতুtoUpperCase()ফাংশনটি শুধুমাত্র string অবজেক্টের উপর কল করা যায়, তাই আপনি এই এররটি পাবেন:"Execution of ConvertToUpperCase failed with error: Javascript runtime error: \"TypeError: Cannot find function toUpperCase in object 100. (ConvertToUpperCase.js:2)\""
সমাধান
সর্বদা বৈধ অবজেক্টের ক্ষেত্রে toUpperCase() এর মতো ফাংশন ব্যবহার করুন।
উপরে দেখানো উদাহরণটি সংশোধন করতে, আপনি একটি স্ট্রিং ভেরিয়েবল তৈরি করতে পারেন এবং তারপরে স্ট্রিংটির উপর toUpperCase() ফাংশনটি প্রয়োগ করতে পারেন:
var text = "Hello Apigee !";
var result = text.toUpperCase();
উদাহরণ ২: একটি অনির্ধারিত অবজেক্ট থেকে প্রপার্টি পড়া যাচ্ছে না
যদি আপনি একটি অনির্ধারিত অবজেক্টের কোনো প্রপার্টি অ্যাক্সেস বা রিড করার চেষ্টা করেন, তাহলে আপনি এই এররটি পাবেন। উদাহরণস্বরূপ, এই এররটি তখন ঘটতে পারে যখন আপনি একটি অ্যারের মধ্যে থাকা কোনো অবজেক্ট থেকে ডেটা অ্যাক্সেস করার চেষ্টা করেন, কিন্তু অবজেক্টটি অনির্ধারিত থাকে। নিচে বিস্তারিত ব্যাখ্যা দেখুন।
ত্রুটির প্রতিক্রিয়ার উদাহরণ বডি
{
"fault": {
"faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:7)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
রোগ নির্ণয়
জাভাস্ক্রিপ্ট পলিসি, এর সোর্স ফাইল, যে লাইনে ত্রুটি ঘটেছে তার লাইন নম্বর এবং ত্রুটির বিবরণ শনাক্ত করুন। আপনি এই সমস্ত তথ্য এরর রেসপন্সের
faultstringএলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিতfaultstringএ, পলিসির নাম হলোParseJSONResponse, সোর্স ফাইল হলোParseJSONResponse.js, লাইন নম্বর হলো6এবং ত্রুটির বিবরণ হলোCannot read property "length" from undefined।"faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:6)\""ত্রুটিটি নির্দেশ করে যে, একটি অনির্ধারিত অবজেক্ট থেকে ' length' প্রপার্টিটি পড়া যাচ্ছে না।
জাভাস্ক্রিপ্ট সোর্স ফাইলের লাইন নম্বরটি (উপরের ধাপ #১-এ চিহ্নিত) পরীক্ষা করুন এবং যাচাই করুন যে অবজেক্টটির একটি বৈধ মান আছে নাকি এটি আনডিফাইন্ড। নির্দিষ্ট অবজেক্টটি কীভাবে সংজ্ঞায়িত বা উদ্ভূত হয়েছিল এবং কেন অবজেক্টটি আনডিফাইন্ড পাওয়া যাচ্ছে তা নির্ধারণ করতে আপনাকে সম্পূর্ণ সোর্স ফাইলটি পড়তে ও বুঝতে হতে পারে। যদি আপনি দেখেন যে নির্দিষ্ট অবজেক্টটি সত্যিই আনডিফাইন্ড এবং আপনি এর 'length' প্রপার্টিটি অ্যাক্সেস করার চেষ্টা করছেন, তাহলে সেটাই ত্রুটির কারণ।
বিষয়টি আরও ভালোভাবে বোঝার জন্য একটি উদাহরণ দেখা যাক:
ধরে নিন যে আপনি ব্যাকএন্ড সার্ভার থেকে নিম্নলিখিত JSON প্রতিক্রিয়াটি পেয়েছেন:
{ "cars": [ { "name":"Toyota", "count": 150 } { "name":"Honda", "count": 100 }, { "name":"Ford", "count": 75 } ] }এখানে একটি নমুনা জাভাস্ক্রিপ্ট সোর্স ফাইল দেওয়া হলো, যা এই JSON রেসপন্সটি পার্স করে এবং উপরে উল্লিখিত ত্রুটিটি ঘটায়:
ParseJSONResponse.js
// Get the JSON response var jsonData = context.getVariable("response.content"); print (jsonData); // Read the cars array for (var i = 0; i < jsonData.cars.length; i++) { print("name = " + jsonData.cars[i].name); print("count = " + jsonData.cars[i].count); }জাভাস্ক্রিপ্ট কোডটি মনোযোগ সহকারে পরীক্ষা করলে আপনি দেখতে পাবেন যে, ২ নম্বর লাইনে
response.contentকেjsonDataভেরিয়েবলে একটি সাধারণ স্ট্রিং (উদ্ধৃতি চিহ্নের মধ্যে) হিসেবে পড়া বা সংরক্ষণ করা হয়েছে।যেহেতু
jsonDataএকটি সাধারণ স্ট্রিং, তাই আপনি যখনjsonDataথেকেcarsঅ্যাক্সেস করার চেষ্টা করবেন (jsonData.cars), তখন এর মান undefined হবে।পরবর্তীতে, যখন আপনি
jsonData.carsথেকেlengthপ্রপার্টিটি পড়ার চেষ্টা করেন, যেটি undefined, তখন আপনি এই এররটি পান:"faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:6)\""
সমাধান
নিশ্চিত করুন যে আপনি সর্বদা প্রাসঙ্গিক JSON API ব্যবহার করে JSON ডেটা একটি JSON অবজেক্ট হিসাবে পড়েন।
উপরে বর্ণিত উদাহরণ জাভাস্ক্রিপ্টটি ঠিক করার জন্য, আপনি response.content অবজেক্টের উপর JSON.parse() ফাংশনটি ব্যবহার করে এটিকে একটি JSON অবজেক্ট হিসেবে পেতে পারেন। এর পরে, আপনি cars অ্যারেটি অ্যাক্সেস করতে এবং সফলভাবে অ্যারের মধ্যে পুনরাবৃত্তি করতে পারবেন।
// Get the JSON response
var data = context.getVariable("response.content");
var jsonData = JSON.parse(data);
print (jsonData);
// Read the cars array
for (var i = 0; i < jsonData.cars.length; i++)
{
print("name = " + jsonData.cars[i].name);
print("count = " + jsonData.cars[i].count);
}
ইউআরআই ত্রুটি
URI ফাংশনে অবৈধ অক্ষর ব্যবহার করলে URIError নামক এররটি প্রদর্শিত হয়। উদাহরণস্বরূপ, যদি আপনি decodeURI বা decodeURIComponent ফাংশনগুলিতে এমন একটি URI পাঠান যাতে পার্সেন্টেজ চিহ্ন রয়েছে, তাহলে আপনি এই এররটি পাবেন।
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault": {
"faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"URIError: error_description. (javascript_source_file_name:line_number)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
ত্রুটির প্রতিক্রিয়ার উদাহরণ বডি
{
"fault": {
"faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
রোগ নির্ণয়
জাভাস্ক্রিপ্ট পলিসি, এর সোর্স ফাইল, যে লাইনে ত্রুটি ঘটেছে তার লাইন নম্বর এবং ত্রুটির বিবরণ শনাক্ত করুন। আপনি এই সমস্ত তথ্য এরর রেসপন্সের `faultstring` এলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিত `faultstring`-এ, জাভাস্ক্রিপ্ট পলিসির নাম হলো
URIDecode</codeজাভাস্ক্রিপ্ট সোর্স ফাইলটি হলোURIDecode.js, লাইন নম্বর হলো2এবং ত্রুটির বিবরণ হলোMalformed URI sequence।"faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""ত্রুটির বিবরণ থেকে বোঝা যাচ্ছে যে,
URIDecode.jsফাইলের ২ নম্বর লাইনে একটি ত্রুটিপূর্ণ URI অনুক্রম ব্যবহার করা হয়েছে।জাভাস্ক্রিপ্ট সোর্স ফাইলটি পরীক্ষা করে দেখুন এবং যাচাই করুন যে URI ফাংশনগুলোর কোনোটিতে পাস করা আর্গুমেন্টে কোনো অবৈধ অক্ষর আছে কিনা। যদি থাকে, তাহলে সেটাই ত্রুটির কারণ।
এখানে একটি জাভাস্ক্রিপ্ট সোর্স ফাইলের উদাহরণ দেওয়া হলো, যার ফলে এই ত্রুটিটি ঘটে:
ইউআরআইডিকোড.জেএস
var str = "75%-Completed"; var decoded_str = decodeURIComponent(str); context.setVariable("decoded_str", decoded_str);উপরে দেখানো উদাহরণ জাভাস্ক্রিপ্ট কোডে,
decodeURIComponent()ফাংশনে পাস করাstrভেরিয়েবলটিতে একটি পার্সেন্টেজ চিহ্ন রয়েছে, যা একটি অবৈধ অক্ষর হিসেবে বিবেচিত; তাই, আপনি এই ত্রুটিটি পাচ্ছেন:"Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
সমাধান
URI ফাংশনে ব্যবহৃত সমস্ত অক্ষর যেন বৈধ ও অনুমোদিত হয়, তা নিশ্চিত করুন।
উপরে বর্ণিত উদাহরণ জাভাস্ক্রিপ্টের সমস্যাটি সমাধান করতে, শতাংশ চিহ্নটি এনকোড করুন। উদাহরণস্বরূপ, %25 :
var str = "75%25-Completed";
var decoded_str = decodeURIComponent(str);
context.setVariable("decoded_str", decoded_str);