Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
ScriptExecutionFailed
Kode error
steps.javascript.ScriptExecutionFailed
Isi respons error
{ "fault": { "faultstring": "Execution of javascript_policy_name failed with error: error_type: error_description. (javascript_source_file_name)\"", "detail": { "errorcode": "steps.javascript.ScriptExecutionFailed" } } }
Jenis Error dan kemungkinan penyebabnya
Kebijakan JavaScript dapat menampilkan berbagai jenis error ScriptExecutionFailed. Beberapa error yang lebih sering terlihat tercantum dalam tabel di bawah:
Jenis Error | Cause |
Error Rentang | RangeError ditampilkan jika Anda menggunakan angka yang berada di luar rentang nilai yang valid. |
Error Referensi | ReferenceError ditampilkan jika Anda menggunakan (mereferensikan) variabel yang belum dideklarasikan. |
Error Sintaksis | SyntaxError ditampilkan jika Anda mencoba mengevaluasi kode dengan error sintaksis. |
Error Jenis | TypeError ditampilkan jika Anda menggunakan operasi yang berada di luar rentang jenis yang diharapkan. |
Error URI | URIError ditampilkan jika Anda menggunakan karakter ilegal dalam fungsi URI. |
Error rentang
Jenis error RangeError
ditampilkan saat Anda mengoperasikan nilai atau meneruskan nilai
ke fungsi yang tidak ada dalam kumpulan atau rentang nilai yang diizinkan.
Misalnya, error ini ditampilkan dalam situasi berikut:
- Jika Anda menggunakan tanggal yang tidak valid seperti 31 September 2018 dengan beberapa Date API.
- Jika Anda meneruskan nilai yang tidak valid ke metode numerik seperti
Number.toPrecision()
,Number.tofixed()
, atauNumber.toExponential()
. Misalnya, Anda meneruskan nilai besar seperti 400 atau 500 dalam metodeNumber.toPrecision()
, Anda akan melihat error rentang. - Jika Anda membuat array dengan panjang yang tidak valid.
Isi respons error
{ "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" } } }
Catatan: Diagnosis dan penyelesaian error rentang bergantung pada pesan error persis yang ditampilkan oleh kebijakan JavaScript. Beberapa contoh dijelaskan di bawah ini sebagai referensi Anda.
Contoh 1: Tanggal Tidak Valid
Contoh isi respons error
{
"fault": {
"faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Diagnosis
Identifikasi kebijakan JavaScript, file sumbernya, nomor baris tempat error terjadi, dan deskripsi error. Anda dapat menemukan semua informasi ini di elemen
faultstring
respons error. Misalnya, dalamfaultstring
berikut, nama kebijakan JavaScript adalahParseDate
, file sumber JavaScript adalahParseDate.js
, nomor baris tempat error terjadi adalah2
, dan deskripsi error adalahDate is invalid
:"faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\""
Periksa file sumber JavaScript (yang diidentifikasi pada langkah #1 di atas) dan periksa apakah ada tanggal yang tidak valid yang digunakan di nomor baris yang ditentukan dalam error atau jika variabel yang digunakan pada nomor baris memiliki tanggal yang tidak valid. Jika tanggal yang digunakan tidak valid, hal itu adalah penyebab error.
Berikut adalah contoh file sumber JavaScript yang menyebabkan error ini:
ParseDate.js
var date = new Date('2018-09-31T11:19:08.402Z'); date.toISOString();
Dalam contoh ini, ada variabel
date
yang digunakan di baris nomor 2. Dengan memeriksa file sumber, Anda dapat melihat bahwa variabeldate
ditetapkan dengan tanggal yang tidak valid:2018-09-31T11:19:08.402Z.
Tanggal ini tidak valid karena bulan September tidak memiliki 31 hari.Catatan: Format ISO-8601 yang digunakan dalam contoh ini adalah:
YYYY-MM-DDTHH:mm:ss.sssZ
Resolusi
Pastikan Anda selalu menggunakan tanggal yang valid saat menggunakan Date API dalam kode JavaScript.
Untuk memperbaiki contoh kode JavaScript yang ditunjukkan di atas, Anda dapat menetapkan tanggal seperti Sept 30 2018
seperti yang ditunjukkan di bawah ini:
var date = new Date('2018-09-30T11:19:08.402Z');
date.toISOString();
Contoh 2: Nomor tidak valid diteruskan ke Precision API
Contoh isi respons error
{
"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"
}
}
}
Diagnosis
Identifikasi kebijakan JavaScript, file sumbernya, nomor baris tempat error terjadi, dan deskripsi error. Anda dapat menemukan semua informasi ini di elemen
faultstring
respons error. Misalnya, dalamfaultstring
berikut, nama kebijakan JavaScript adalahSetNumberPrecision
, file sumber JavaScript adalahSetNumberPrecision.js
, nomor baris tempat error terjadi adalah 2, dan deskripsi error adalahPrecision 400 out of range.
"faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
Periksa file sumber JavaScript (diidentifikasi pada langkah #1 di atas). Jika angka yang disebutkan sebagai bagian dari deskripsi error digunakan di nomor baris tertentu, itulah penyebab errornya.
Berikut adalah contoh file sumber JavaScript yang menyebabkan error ini:
SetNumberPrecision.js
var number = 12.3456; var rounded_number = number.toPrecision(400); print("rounded_number = " + rounded_number);
Dalam contoh ini, perhatikan bahwa nilai besar 400 digunakan di baris nomor 2. Karena Anda tidak dapat menetapkan presisi ke angka yang begitu banyak, Anda akan mendapatkan error di bawah ini:
"faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
Resolusi
Pastikan angka yang digunakan dalam metode toPrecision()
berada dalam kumpulan nilai yang diizinkan.
Untuk memperbaiki masalah pada contoh JavaScript yang dijelaskan di atas, tetapkan jumlah digit signifikan ke 2 yang valid:
var number = 12.3456;
var rounded_number = number.toPrecision(2);
print("rounded_number = " + rounded_number);
Error referensi
Jenis error ReferenceError
ditampilkan saat variabel yang tidak ditentukan dalam JavaScript Anda
digunakan (direferensikan) atau dioperasikan.
Isi respons error
{ "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" } } }
Contoh isi respons error
{
"fault": {
"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Diagnosis
Identifikasi kebijakan JavaScript, file sumbernya, dan nomor baris tempat variabel yang tidak ditentukan direferensikan. Anda dapat menemukan semua informasi ini di elemen
faultstring
respons error. Misalnya, dalamfaultstring
berikut, nama kebijakan JavaScript adalahComputeTotalPrice
, file sumber yang sesuai adalahComputeTotalPrice.js
, nomor baris tempat error terjadi adalah3
, dan nama variabel yang tidak ditentukan adalahprice.
"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
Periksa nomor baris dalam file sumber JavaScript dan verifikasi apakah variabel yang tidak ditentukan yang diidentifikasi pada langkah #1 di atas sedang dirujuk. Misalnya, kode JavaScript berikut mereferensikan variabel
price
yang tidak ditentukan di baris 3, yang cocok dengan yang ada di 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);
Periksa apakah variabel tertentu ditentukan dalam kode JavaScript. Jika variabel tidak ditentukan, hal itulah yang menyebabkan error.
Dalam contoh skrip yang ditampilkan di atas, variabel
price
yang tidak dideklarasikan/ditentukan digunakan; oleh karena itu, Anda akan melihat error di bawah:"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
Resolusi
Pastikan semua variabel yang dirujuk dalam kode JavaScript ditentukan dengan benar.
Untuk memperbaiki masalah pada contoh JavaScript yang ditampilkan di atas, tentukan harga variabel sebelum menggunakannya. Contoh:
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);
Error sintaksis
Jenis error SyntaxError
ditampilkan saat mesin JavaScript menemukan token
atau urutan token yang tidak sesuai dengan sintaksis bahasa, atau saat input format
yang tidak valid diteruskan ke API parser seperti penguraian JSON/XML.
Misalnya, jika payload JSON yang tidak valid atau salah format diteruskan sebagai input ke JSON.parse
API yang digunakan dalam kebijakan JavaScript, Anda akan mendapatkan error ini.
Isi respons error
{ "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" } } }
Contoh isi respons error
{
"fault": {
"faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Diagnosis
Identifikasi kebijakan JavaScript, file sumbernya, nomor baris tempat error terjadi, dan deskripsi error. Anda dapat menemukan semua informasi ini di elemen
faultstring
respons error. Misalnya, dalamfaultstring
berikut, nama kebijakan JavaScript adalahParseJSONRequest
, file sumber JavaScript adalahParseJSONRequest.js
, nomor baris tempat error terjadi adalah2
, dan deskripsi error adalahUnexpected token
:"faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
Periksa nomor baris 2 di file sumber JavaScript (diidentifikasi pada langkah #1 di atas) dan periksa operasi yang sedang dilakukan. Jika fungsi
JSON.parse()
sedang dieksekusi, periksa parameter input yang diteruskan ke fungsi tersebut. Jika parameter input tidak valid atau JSON-nya salah format, hal tersebut adalah penyebab error.Berikut adalah contoh kode JavaScript yang menyebabkan error ini:
var input = context.getVariable("request.content"); var result = JSON.parse(input);
Dalam contoh ini, payload permintaan (
request.content
) yang diteruskan ke Proxy API digunakan sebagai input ke fungsiJSON.parse()
.Berikut adalah contoh panggilan API yang menunjukkan cara penerusan permintaan:
curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '<city>Bangalore</city>'
Dalam permintaan di atas, payload XML berikut diteruskan ke Proxy API
<city>Bangalore</city>
.JSON.parse
API mengharapkan JSON yang valid diteruskan, tetapi karena payload XML yang diteruskan, API akan gagal dengan error di bawah:"Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
Resolusi
Pastikan untuk meneruskan input yang valid ke API penguraian yang digunakan dalam kode JavaScript.
Untuk memperbaiki masalah pada contoh kebijakan yang dibahas di atas, teruskan permintaan payload JSON yang valid sebagai berikut:
curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '{"city" : "Bangalore"}'
Error jenis
Jenis error TypeError
ditampilkan jika:
- Operand atau argumen yang diteruskan ke fungsi tidak kompatibel dengan jenis yang diharapkan oleh operator atau fungsi tersebut.
- Fungsi dipanggil pada objek null, belum ditentukan, atau salah.
- Properti diakses dari objek null, tidak ditentukan, atau salah.
Misalnya, error jenis ditampilkan:
- Jika Anda mencoba memanggil fungsi
toUpperCase()
pada angka. Hal ini karena fungsitoUpperCase()
hanya dapat dipanggil pada objek string. - Jika Anda mencoba membaca properti dari objek null atau belum ditentukan.
Isi respons error
{ "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" } } }
Contoh 1: Memanggil fungsi pada objek yang salah
Jika Anda mencoba memanggil fungsi pada objek yang tidak didukung, Anda akan mendapatkan error ini.
Misalnya, jika Anda mencoba memanggil fungsi toUpperCase()
pada angka, Anda akan mendapatkan error. Hal ini karena fungsi toUpperCase()
hanya dapat dipanggil pada
objek string.
Contoh isi respons error
{
"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"
}
}
}
Diagnosis
Identifikasi kebijakan JavaScript, file sumbernya, nomor baris tempat error terjadi, dan deskripsi error. Anda dapat menemukan semua informasi ini di elemen
faultstring
respons error. Misalnya, difaultstring
berikut, nama kebijakan JavaScript adalahConvertToUpperCase
, file sumbernya adalahConvertToUpperCase.js
, nomor barisnya adalah2
, dan deskripsi error-nya adalah **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)\""
Deskripsi error menunjukkan bahwa Anda memanggil fungsi
toUpperCase()
pada objek yang nilai numeriknya adalah 100.Periksa file sumber JavaScript dan verifikasi apakah Anda memanggil fungsi
toUpperCase()
pada objek yang nilai numeriknya adalah 100 di nomor baris 2 (diidentifikasi pada langkah # 1 di atas). Jika ya, maka itulah penyebab error.Berikut contoh file sumber JavaScript yang menyebabkan error ini:
ConvertToUpperCase.js
var number = 100; var result = number.toUpperCase();
Dalam kode JavaScript yang ditampilkan di atas, variabel
number
ditetapkan dengan nilai 100. Selanjutnya, fungsitoUpperCase()(
dipanggil pada objek angka. Karena fungsitoUpperCase()
hanya dapat dipanggil pada objek string, Anda akan mendapatkan error:"Execution of ConvertToUpperCase failed with error: Javascript runtime error: \"TypeError: Cannot find function toUpperCase in object 100. (ConvertToUpperCase.js:2)\""
Resolusi
Selalu gunakan fungsi seperti toUpperCase()
pada objek yang valid.
Untuk memperbaiki contoh yang ditampilkan di atas, Anda dapat membuat variabel string, lalu memanggil
fungsi toUpperCase()
pada string:
var text = "Hello Apigee !";
var result = text.toUpperCase();
Contoh 2: Tidak dapat membaca properti dari objek yang tidak ditentukan
Jika Anda mencoba mengakses/membaca properti dari objek yang tidak ditentukan, Anda akan mendapatkan error ini. Misalnya, error ini dapat terjadi saat Anda mencoba mengakses data dari objek dalam array, tetapi objek tersebut tidak ditentukan. Lihat penjelasan mendetail di bawah.
Contoh isi respons error
{
"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"
}
}
}
Diagnosis
Identifikasi kebijakan JavaScript, file sumbernya, nomor baris tempat error terjadi, dan deskripsi error. Anda dapat menemukan semua informasi ini di elemen
faultstring
respons error. Misalnya, dalamfaultstring
berikut, nama kebijakan adalahParseJSONResponse
, file sumber adalahParseJSONResponse.js
, nomor baris adalah6
, dan deskripsi error adalahCannot 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)\""
Error ini menunjukkan bahwa properti length tidak dapat dibaca dari objek yang tidak ditentukan.
Periksa nomor baris dalam file sumber JavaScript (diidentifikasi pada langkah #1 di atas) dan verifikasi apakah objek memiliki nilai yang valid atau tidak ditentukan. Anda mungkin harus membaca dan memahami file sumber lengkap untuk menentukan cara objek tertentu ditentukan atau diturunkan dan menentukan alasan objek tersebut tidak ditemukan. Jika Anda mendapati bahwa objek tertentu memang tidak ditentukan dan Anda mencoba mengakses panjang properti dari objek tersebut, hal itulah yang menyebabkan error.
Mari lihat contoh untuk lebih memahami masalah ini:
Anggaplah Anda menerima respons JSON berikut dari server backend:
{ "cars": [ { "name":"Toyota", "count": 150 } { "name":"Honda", "count": 100 }, { "name":"Ford", "count": 75 } ] }
Berikut adalah contoh file sumber JavaScript yang mengurai respons JSON ini dan menyebabkan error yang disebutkan di atas:
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); }
Dengan memeriksa kode JavaScript dengan cermat, Anda dapat melihat bahwa di baris nomor 2,
response.content
dibaca/disimpan ke variabeljsonData
sebagai string reguler (dalam tanda kutip).Karena
jsonData
adalah string reguler, saat Anda mencoba mengaksescars
darijsonData
(jsonData.cars
) tidak akan ditentukan.Selanjutnya, saat Anda mencoba membaca properti
length
darijsonData.cars
, yang tidak ditentukan, Anda akan mendapatkan error:"faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:6)\""
Resolusi
Pastikan Anda selalu membaca data JSON sebagai objek JSON menggunakan JSON API yang relevan.
Untuk memperbaiki contoh JavaScript yang dijelaskan di atas, Anda dapat menggunakan fungsi JSON.parse()
pada objek response.content
untuk mendapatkannya sebagai objek JSON. Setelah itu, Anda dapat
mengakses array cars
dan melakukan iterasi melalui array dengan sukses.
// 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);
}
Error URI
Jenis error URIError
ditampilkan jika Anda menggunakan karakter ilegal dalam fungsi URI.
Misalnya, jika meneruskan URI yang memiliki simbol persentase ke fungsi decodeURI
atau
decodeURIComponent
, Anda akan mendapatkan error ini.
Isi respons error
{ "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" } } }
Contoh isi respons error
{
"fault": {
"faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Diagnosis
Identifikasi kebijakan JavaScript, file sumbernya, nomor baris tempat error terjadi, dan deskripsi error. Anda dapat menemukan semua informasi ini di elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakan JavaScript adalah
URIDecode</code
, file sumber JavaScript adalahURIDecode.js
, nomor barisnya adalah2
, dan deskripsi error-nya adalahMalformed URI sequence
:"faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
Deskripsi error menunjukkan bahwa urutan URI yang salah formatnya digunakan di baris nomor 2 dari
URIDecode.js
.Periksa file sumber JavaScript dan verifikasi apakah argumen yang diteruskan ke salah satu fungsi URI berisi karakter ilegal. Jika ya, berarti itulah penyebab error.
Berikut adalah contoh file sumber JavaScript yang menyebabkan error ini:
URIDecode.js
var str = "75%-Completed"; var decoded_str = decodeURIComponent(str); context.setVariable("decoded_str", decoded_str);
Pada contoh kode JavaScript yang ditampilkan di atas, variabel
str
yang diteruskan kedecodeURIComponent()
memiliki simbol persentase, yang dianggap sebagai karakter ilegal; oleh karena itu, Anda akan mendapatkan error:"Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
Resolusi
Pastikan semua karakter yang digunakan dalam fungsi URI sah dan diizinkan.
Untuk memperbaiki masalah pada contoh JavaScript yang dijelaskan di atas, gunakan simbol persentase yang dienkode. Misalnya, %25
:
var str = "75%25-Completed";
var decoded_str = decodeURIComponent(str);
context.setVariable("decoded_str", decoded_str);