Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat
dokumentasi Apigee Edge.
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 kesalahan yang lebih sering ditemui tercantum dalam tabel di bawah:
Jenis Error | Penyebab |
Error Rentang | RangeError ditampilkan jika Anda menggunakan angka yang berada di luar rentang nilai resmi. |
Error Referensi | ReferenceError muncul jika Anda menggunakan (referensi) variabel yang belum dideklarasikan. |
Error Sintaksis | SyntaxError ditampilkan jika Anda mencoba mengevaluasi kode yang memiliki 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 terlarang dalam fungsi URI. |
Error rentang
Jenis error RangeError
ditampilkan saat Anda beroperasi pada nilai atau meneruskan nilai
ke fungsi yang tidak ada dalam kumpulan atau rentang nilai yang diizinkan.
Misalnya, error ini ditampilkan dalam keadaan 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 sah.
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 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 terjadinya error, dan deskripsi error. Anda dapat menemukan semua informasi ini dalam 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 digunakan di nomor baris yang ditetapkan dalam error atau apakah variabel yang digunakan dalam nomor baris memiliki tanggal yang tidak valid. Jika tanggal yang tidak valid digunakan, berarti itulah 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 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 ditampilkan di atas, Anda dapat menetapkan tanggal sebagai 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 yang 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 dalam 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 (yang diidentifikasi pada langkah #1 di atas). Jika jumlah besar yang disebutkan sebagai bagian dari deskripsi error digunakan dalam nomor baris tertentu, maka itulah penyebab error.
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 jumlah digit yang besar, Anda mendapatkan error di bawah:
"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 angka penting 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 di 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 dalam 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 di file sumber JavaScript dan pastikan variabel yang tidak ditentukan yang diidentifikasi pada langkah #1 di atas direferensikan. Misalnya, kode JavaScript berikut merujuk ke variabel
price
yang tidak ditentukan di baris 3, yang cocok dengan apa 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 telah ditetapkan dalam kode JavaScript. Jika variabel tidak ditentukan, berarti itulah penyebab error.
Pada 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 direferensikan dalam kode JavaScript ditetapkan 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 dalam 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 baris nomor 2 di file sumber JavaScript (yang diidentifikasi pada langkah #1 di atas) dan periksa operasi apa yang sedang dilakukan. Jika fungsi
JSON.parse()
sedang dieksekusi, periksa parameter input yang diteruskan ke fungsi tersebut. Jika parameter input tidak valid atau format JSON salah, berarti itulah 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 untuk fungsiJSON.parse()
.Berikut adalah contoh panggilan API yang menunjukkan cara permintaan diteruskan:
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, payload gagal dengan error di bawah ini:"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, tidak ditentukan, atau salah.
- Properti diakses dari objek null, tidak ditentukan, atau salah.
Misalnya, muncul error jenis:
- Jika Anda mencoba memanggil fungsi
toUpperCase()
pada suatu angka. Hal ini karena fungsitoUpperCase()
hanya dapat dipanggil pada objek string. - Jika Anda mencoba membaca properti dari objek null atau yang tidak 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 dalam elemen
faultstring
respons error. Misalnya, dalamfaultstring
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 100.Periksa file sumber JavaScript dan verifikasi apakah Anda memanggil fungsi
toUpperCase()
pada objek yang nilai numeriknya 100 di baris nomor 2 (diidentifikasi pada langkah # 1 di atas). Jika ya, maka itulah penyebab error.Berikut adalah contoh file sumber JavaScript yang menyebabkan error ini:
ConvertToUpperCase.js
var number = 100; var result = number.toUpperCase();
Pada kode JavaScript yang ditampilkan di atas, variabel
number
ditetapkan dengan nilai 100. Selanjutnya, fungsitoUpperCase()(
akan 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 ditunjukkan 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 tidak ditentukan. Lihat penjelasan mendetail di bawah ini.
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 terjadinya error, dan deskripsi error. Anda dapat menemukan semua informasi ini dalam elemen
faultstring
respons error. Misalnya, dalamfaultstring
berikut, nama kebijakannya adalahParseJSONResponse
, file sumbernya adalahParseJSONResponse.js
, nomor barisnya adalah6
, dan deskripsi error-nya 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 menunjukkan bahwa properti length tidak dapat dibaca dari objek yang tidak ditentukan.
Periksa nomor baris di file sumber JavaScript (yang 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 bagaimana objek tertentu didefinisikan atau diturunkan dan menentukan mengapa objek tersebut didapati tidak terdefinisi. Jika Anda menemukan bahwa objek tertentu memang tidak ditentukan dan Anda mencoba mengakses panjang properti darinya, itulah penyebab error.
Mari kita lihat contoh untuk lebih memahami masalah ini:
Asumsikan bahwa 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 biasa (dalam tanda kutip).Karena
jsonData
adalah string reguler, saat Anda mencoba mengaksescars
darijsonData
(jsonData.cars
) tidak akan ditentukan.Selanjutnya, saat 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 akan berhasil mengakses array cars
dan melakukan iterasi melalui array.
// 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 Anda meneruskan URI yang memiliki simbol persentase ke fungsi decodeURI
atau
decodeURIComponent
, Anda akan menerima 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 dari respons error. Misalnya, dalam Faultstring berikut, nama kebijakan JavaScript adalah
URIDecode</code
file sumber JavaScript adalahURIDecode.js
, nomor baris adalah2
, dan deskripsi error 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 dengan format yang salah digunakan dalam baris nomor 2
URIDecode.js
.Periksa file sumber JavaScript dan pastikan argumen yang diteruskan ke salah satu fungsi URI berisi karakter yang tidak sah. Jika ya, maka 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 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 enkode simbol persentase. Misalnya, %25
:
var str = "75%25-Completed";
var decoded_str = decodeURIComponent(str);
context.setVariable("decoded_str", decoded_str);