Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
ScriptExecutionFailed
Codice di errore
steps.javascript.ScriptExecutionFailed
Corpo della risposta all'errore
{ "fault": { "faultstring": "Execution of javascript_policy_name failed with error: error_type: error_description. (javascript_source_file_name)\"", "detail": { "errorcode": "steps.javascript.ScriptExecutionFailed" } } }
Tipi di errori e possibili cause
Il criterio JavaScript può generare molti tipi diversi di errori ScriptExecutionFailed. Alcuni degli errori più comuni sono elencati nella tabella seguente:
Tipo di errore | Causa |
Errore intervallo | Se utilizzi un numero non compreso nell'intervallo dei valori ammessi, viene visualizzato un errore RangeError. |
Errore nel riferimento | Se utilizzi (riferimento) una variabile non dichiarata, viene generato un valore ReferenceError. |
Errore di sintassi | Se provi a valutare il codice con un errore di sintassi, viene visualizzato un errore SyntaxError. |
Errore di tipo | Se utilizzi un'operazione che non rientra nell'intervallo dei tipi previsti, viene generato un errore TypeError. |
Errore URI | Se utilizzi caratteri non ammessi in una funzione URI, viene generato un errore URIError. |
Errore intervallo
Il tipo di errore RangeError
viene generato quando operi su un valore o passi un valore a una funzione che non rientra nel set o nell'intervallo di valori consentiti.
Ad esempio, questo errore viene generato nelle seguenti circostanze:
- Se utilizzi una data non valida, ad esempio 31 settembre 2018, con alcune API di tipo Data.
- Se passi un valore non valido a metodi numerici come
Number.toPrecision()
,Number.tofixed()
oNumber.toExponential()
. Ad esempio, se passi un valore grande come 400 o 500 nel metodoNumber.toPrecision()
, visualizzerai un errore di intervallo. - Se crei un array con lunghezza non valida.
Corpo della risposta all'errore
{ "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" } } }
Nota:la diagnosi e la risoluzione degli errori di intervallo dipendono dal messaggio di errore esatto generato dal criterio JavaScript. Di seguito sono riportati un paio di esempi come riferimento.
Esempio 1: data non valida
Esempio di corpo della risposta di errore
{
"fault": {
"faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Diagnostica
Identifica il criterio JavaScript, il relativo file di origine, il numero di riga in cui si è verificato l'errore e la descrizione dell'errore. Puoi trovare tutte queste informazioni nell'elemento
faultstring
della risposta di errore. Ad esempio, nel seguentefaultstring
, il nome del criterio JavaScript èParseDate
, il file di origine JavaScript èParseDate.js
, il numero di riga in cui si è verificato l'errore è2
e la descrizione dell'errore èDate is invalid
:"faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\""
Esamina il file di origine JavaScript (identificato nel passaggio 1 sopra riportato) e controlla se viene utilizzata una data non valida nel numero di riga specificato nell'errore o se la variabile utilizzata nel numero di riga ha una data non valida. L'utilizzo di una data non valida è il motivo dell'errore.
Di seguito è riportato un esempio di file di origine JavaScript che genera questo errore:
ParseDate.js
var date = new Date('2018-09-31T11:19:08.402Z'); date.toISOString();
In questo esempio, è stata utilizzata una variabile
date
nella riga numero 2. Esaminando il file di origine, noterai che la variabiledate
è impostata con una data non valida:2018-09-31T11:19:08.402Z.
Questa data non è valida perché settembre non ha 31 giorni.Nota. Il formato ISO-8601 utilizzato in questo esempio è
YYYY-MM-DDTHH:mm:ss.sssZ
Risoluzione
Assicurati di utilizzare sempre una data valida quando utilizzi le API Date nel codice JavaScript.
Per correggere il codice JavaScript di esempio mostrato sopra, puoi impostare la data come Sept 30 2018
come mostrato di seguito:
var date = new Date('2018-09-30T11:19:08.402Z');
date.toISOString();
Esempio 2: numero non valido trasmesso alle API di precisione
Esempio di corpo della risposta di errore
{
"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"
}
}
}
Diagnostica
Identifica il criterio JavaScript, il relativo file di origine, il numero di riga in cui si è verificato l'errore e la descrizione dell'errore. Puoi trovare tutte queste informazioni nell'elemento
faultstring
della risposta di errore. Ad esempio, nel seguentefaultstring
, il nome del criterio JavaScript èSetNumberPrecision
, il file di origine JavaScript èSetNumberPrecision.js
, il numero di riga in cui si è verificato l'errore è 2 e la descrizione dell'errore èPrecision 400 out of range.
"faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
Esamina il file di origine JavaScript (identificato nel precedente passaggio 1). Se il numero elevato menzionato nella descrizione dell'errore viene utilizzato nel numero di riga specifico, è questa la causa dell'errore.
Di seguito è riportato un esempio di file di origine JavaScript che genera questo errore:
SetNumberPrecision.js
var number = 12.3456; var rounded_number = number.toPrecision(400); print("rounded_number = " + rounded_number);
In questo esempio, puoi notare che alla riga numero 2 viene utilizzato un valore elevato pari a 400. Poiché non è possibile impostare la precisione su un numero così elevato di cifre, viene visualizzato il seguente errore:
"faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
Risoluzione
Assicurati che il numero utilizzato nel metodo toPrecision()
rientri nell'insieme dei valori consentiti.
Per risolvere il problema con il codice JavaScript di esempio descritto sopra, imposta il numero di cifre significative su 2, che sia valido:
var number = 12.3456;
var rounded_number = number.toPrecision(2);
print("rounded_number = " + rounded_number);
Errore riferimento
Il tipo di errore ReferenceError
viene generato quando viene utilizzata (a cui viene fatto riferimento) o operata una variabile non definita in JavaScript.
Corpo della risposta all'errore
{ "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" } } }
Esempio di corpo della risposta di errore
{
"fault": {
"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Diagnostica
Identifica il criterio JavaScript, il relativo file di origine e il numero di riga in cui viene fatto riferimento alla variabile non definita. Puoi trovare tutte queste informazioni nell'elemento
faultstring
della risposta di errore. Ad esempio, nel seguentefaultstring
, il nome del criterio JavaScript èComputeTotalPrice
, il file di origine corrispondente èComputeTotalPrice.js
, il numero di riga in cui si è verificato l'errore è3
e il nome della variabile non definita èprice.
"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
Esamina il numero di riga nel file di origine JavaScript e verifica se viene fatto riferimento alla variabile non definita identificata nel passaggio 1 sopra riportato. Ad esempio, il seguente codice JavaScript fa riferimento alla variabile non definita
price
nella riga 3, che corrisponde al contenuto della stringa di errore: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);
Verifica se la variabile specifica è definita nel codice JavaScript. Se la variabile non è definita, è questo il motivo dell'errore.
Nello script di esempio mostrato sopra, viene utilizzata la variabile
price
non dichiarata/definita; di conseguenza, verrà visualizzato il seguente errore:"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
Risoluzione
Assicurati che tutte le variabili a cui viene fatto riferimento nel codice JavaScript siano definite correttamente.
Per risolvere il problema con il codice JavaScript di esempio mostrato sopra, definisci il prezzo variabile prima di utilizzarlo. Ad esempio:
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);
Errore di sintassi
Il tipo di errore SyntaxError
viene generato quando il motore JavaScript rileva token o un ordine dei token non conforme alla sintassi del linguaggio oppure quando un input di formato non valido viene trasmesso alle API del parser, ad esempio l'analisi JSON/XML.
Ad esempio, se il payload JSON non valido o non corretto viene trasmesso come input all'API JSON.parse
utilizzata nel criterio JavaScript, viene visualizzato questo errore.
Corpo della risposta all'errore
{ "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" } } }
Esempio di corpo della risposta di errore
{
"fault": {
"faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Diagnostica
Identifica il criterio JavaScript, il relativo file di origine, il numero di riga in cui si è verificato l'errore e la descrizione dell'errore. Puoi trovare tutte queste informazioni nell'elemento
faultstring
della risposta di errore. Ad esempio, nel seguentefaultstring
, il nome del criterio JavaScript èParseJSONRequest
, il file di origine JavaScript èParseJSONRequest.js
, il numero di riga in cui si è verificato l'errore è2
e la descrizione dell'errore èUnexpected token
:"faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
Esamina la riga numero 2 nel file di origine JavaScript (identificato nel passaggio 1 sopra) e controlla quale operazione viene eseguita. Se viene eseguita una funzione
JSON.parse()
, controlla il parametro di input che le è stato trasmesso. Se il parametro di input non è valido o ha un formato JSON in formato JSON, è questo il motivo dell'errore.Di seguito è riportato un esempio di codice JavaScript che genera questo errore:
var input = context.getVariable("request.content"); var result = JSON.parse(input);
In questo esempio, il payload della richiesta (
request.content
) passato al proxy API viene utilizzato come input per la funzioneJSON.parse()
.Ecco la chiamata API di esempio che mostra come è stata trasmessa la richiesta:
curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '<city>Bangalore</city>'
Nella richiesta riportata sopra, il seguente payload XML viene passato al proxy API
<city>Bangalore</city>
. L'APIJSON.parse
prevede che venga trasmesso un JSON valido, ma poiché viene trasmesso un payload XML, l'operazione non riesce e viene restituito l'errore seguente:"Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
Risoluzione
Assicurati di passare input validi alle API di analisi utilizzate nel codice JavaScript.
Per risolvere il problema con il criterio di esempio discusso sopra, trasmetti una richiesta di payload JSON valida come segue:
curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '{"city" : "Bangalore"}'
Errore di digitazione
Il tipo di errore TypeError
viene generato quando:
- Un operando o un argomento passato a una funzione non è compatibile con il tipo previsto dall'operatore o dalla funzione in questione.
- Una funzione viene richiamata su un oggetto nullo, non definito o errato.
- È possibile accedere a una proprietà da un oggetto nullo, non definito o errato.
Ad esempio, viene generato un errore di tipo:
- Se tenti di richiamare la funzione
toUpperCase()
su un numero. Questo perché la funzionetoUpperCase()
può essere richiamata solo su oggetti stringa. - Se tenti di leggere una proprietà da un oggetto nullo o non definito.
Corpo della risposta all'errore
{ "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" } } }
Esempio 1: richiamare una funzione nell'oggetto sbagliato
Se tenti di richiamare una funzione su un oggetto non supportato, viene visualizzato questo errore.
Ad esempio, se tenti di richiamare la funzione toUpperCase()
su un numero, viene visualizzato l'errore. Questo perché la funzione toUpperCase()
può essere richiamata solo
su oggetti stringa.
Esempio di corpo della risposta di errore
{
"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"
}
}
}
Diagnostica
Identifica il criterio JavaScript, il relativo file di origine, il numero di riga in cui si è verificato l'errore e la descrizione dell'errore. Puoi trovare tutte queste informazioni nell'elemento
faultstring
della risposta di errore. Ad esempio, nel seguentefaultstring
, il nome del criterio JavaScript èConvertToUpperCase
, il file di origine èConvertToUpperCase.js
, il numero di riga è2
e la descrizione dell'errore è **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)\""
La descrizione dell'errore indica che stai richiamando la funzione
toUpperCase()
su un oggetto il cui valore numerico è 100.Esamina il file di origine JavaScript e verifica se stai richiamando la funzione
toUpperCase()
su un oggetto il cui valore numerico è 100 alla riga numero 2 (identificato nel passaggio 1 sopra). Se sì, è questa la causa dell'errore.Di seguito è riportato un esempio di file di origine JavaScript che genera questo errore:
ConvertToUpperCase.js
var number = 100; var result = number.toUpperCase();
Nel codice JavaScript mostrato sopra, la variabile
number
è impostata con un valore pari a 100. In seguito, la funzionetoUpperCase()(
viene richiamata sull'oggetto number. Poiché la funzionetoUpperCase()
può essere richiamata solo sugli oggetti stringa, viene visualizzato l'errore:"Execution of ConvertToUpperCase failed with error: Javascript runtime error: \"TypeError: Cannot find function toUpperCase in object 100. (ConvertToUpperCase.js:2)\""
Risoluzione
Usa sempre funzioni come toUpperCase()
sugli oggetti validi.
Per correggere l'esempio mostrato sopra, puoi creare una variabile stringa e quindi richiamare la funzione toUpperCase()
su una stringa:
var text = "Hello Apigee !";
var result = text.toUpperCase();
Esempio 2: impossibile leggere la proprietà da un oggetto non definito
Se tenti di accedere a/leggere una proprietà da un oggetto non definito, viene visualizzato questo errore. Ad esempio, questo errore può verificarsi quando tenti di accedere ai dati da un oggetto in un array, ma l'oggetto non è definito. Consulta la spiegazione dettagliata di seguito.
Esempio di corpo della risposta di errore
{
"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"
}
}
}
Diagnostica
Identifica il criterio JavaScript, il relativo file di origine, il numero di riga in cui si è verificato l'errore e la descrizione dell'errore. Puoi trovare tutte queste informazioni nell'elemento
faultstring
della risposta di errore. Ad esempio, nel seguentefaultstring
, il nome del criterio èParseJSONResponse
, il file di origine èParseJSONResponse.js
, il numero di riga è6
e la descrizione dell'errore è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)\""
L'errore indica che la proprietà length non può essere letta da un oggetto non definito.
Esamina il numero della riga nel file di origine JavaScript (identificato nel passaggio 1 sopra) e verifica se l'oggetto ha un valore valido o non è definito. Potresti dover leggere e comprendere il file di origine completo per determinare come è stato definito o derivato l'oggetto specifico e perché l'oggetto risulta indefinito. Se scopri che l'oggetto specifico non è effettivamente definito e stai tentando di accedere alla sua lunghezza della proprietà, è questa la causa dell'errore.
Esaminiamo un esempio per comprendere meglio il problema:
Supponi di ricevere la seguente risposta JSON dal server di backend:
{ "cars": [ { "name":"Toyota", "count": 150 } { "name":"Honda", "count": 100 }, { "name":"Ford", "count": 75 } ] }
Ecco un esempio di file di origine JavaScript che analizza questa risposta JSON e genera l'errore indicato sopra:
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); }
Esaminando attentamente il codice JavaScript puoi notare che nella riga numero 2,
response.content
viene letto/memorizzato nella variabilejsonData
sotto forma di stringa normale (tra virgolette).Poiché
jsonData
è una stringa normale, il tentativo di accesso acars
dajsonData
(jsonData.cars
) non sarà definito.Successivamente, quando provi a leggere la proprietà
length
dajsonData.cars
, che non è definita, ricevi l'errore:"faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:6)\""
Risoluzione
Assicurati di leggere sempre i dati JSON come oggetto JSON utilizzando le API JSON pertinenti.
Per correggere il codice JavaScript di esempio descritto sopra, puoi utilizzare la funzione JSON.parse()
nell'oggetto response.content
per ottenerlo come oggetto JSON. Successivamente, puoi accedere all'array cars
ed eseguire correttamente l'iterazione dell'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);
}
Errore URI
Se utilizzi caratteri non ammessi in una funzione URI, viene visualizzato il tipo di errore URIError
.
Ad esempio, se passi un URI con un simbolo di percentuale alle funzioni decodeURI
o decodeURIComponent
, riceverai questo errore.
Corpo della risposta all'errore
{ "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" } } }
Esempio di corpo della risposta di errore
{
"fault": {
"faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Diagnostica
Identifica il criterio JavaScript, il relativo file di origine, il numero di riga in cui si è verificato l'errore e la descrizione dell'errore. Puoi trovare tutte queste informazioni nell'elemento stringa di errore della risposta di errore. Ad esempio, nella seguente stringa di errore, il nome del criterio JavaScript è
URIDecode</code
, il file di origine JavaScript èURIDecode.js
, il numero della riga è2
e la descrizione dell'errore èMalformed URI sequence
:"faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
La descrizione dell'errore indica che nella riga numero 2 di
URIDecode.js
viene utilizzata una sequenza URI non corretta.Esamina il file di origine JavaScript e verifica se l'argomento trasmesso a una delle funzioni URI contiene caratteri non ammessi. Se sì, è questa la causa dell'errore.
Ecco un esempio di file di origine JavaScript che genera questo errore:
URIDecode.js
var str = "75%-Completed"; var decoded_str = decodeURIComponent(str); context.setVariable("decoded_str", decoded_str);
Nel codice JavaScript di esempio mostrato sopra, la variabile
str
passata adecodeURIComponent()
ha un simbolo di percentuale, che è considerato un carattere non valido; di conseguenza, ricevi l'errore:"Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
Risoluzione
Assicurati che tutti i caratteri utilizzati nelle funzioni URI siano legali e consentiti.
Per risolvere il problema con il codice JavaScript di esempio descritto sopra, utilizza la codifica del simbolo di percentuale. Ad esempio, %25
:
var str = "75%25-Completed";
var decoded_str = decodeURIComponent(str);
context.setVariable("decoded_str", decoded_str);