2013-01-11 11 views
6

ich ein einfaches Beispiel haben:Wie eine Nachricht in Fehler mit try Handhabung drucken, fangen

var str = '{ "test" : 1, }' 

try { 
    JSON.parse(str); 
} catch (e) { 
    console.log(e) 
} 

Ergebnis:

[Syntaxerror: unerwartete Token}]

Wie alle Fehler drucken Infos?

Erwartetes Ergebnis:

undefined:1 
{ "test" : 1, } 
     ^
SyntaxError: Unexpected token } 
+0

Es gibt keine Informationen im Fehlerobjekt darüber, welches Zeichen den Fehler verursacht hat, wenn Sie das suchen. – Cerbrus

Antwort

6

Dies wird dazu beitragen:

var x = { asd: "asd", }; 

try { 
    JSON.parse(x); 
} 
catch (e) { 
    console.log("Error", e.stack); 
    console.log("Error", e.name); 
    console.log("Error", e.message); 
} 

error.stack ist nicht genau das, was Sie wollen, aber es wird Ihnen helfen.

2

Dies zeigt Ihnen die verschiedenen Möglichkeiten, wie Sie die Informationen erhalten können:

var str = '{"test": 1, }'; 

try { 
    JSON.parse(str); 
} catch(e) { 

    console.log("error object:"); 
    console.log(e); 
    console.log(); 

    console.log("error object toString():"); 
    console.log("\t" + e.toString()); 

    console.log(); 
    console.log("error object attributes: "); 
    console.log('\tname: ' + e.name + ' message: ' + e.message + ' at: ' + e.at + ' text: ' + e.text); 

    console.log(); 
    console.log("error object stack: "); 
    console.log(e.stack); 
} 

Die Ausgabe lautet:

error object: 
[SyntaxError: Unexpected token }] 

error object toString(): 
    SyntaxError: Unexpected token } 

error object attributes: 
    name: SyntaxError message: Unexpected token } at: undefined text: undefined 

error object stack: 
SyntaxError: Unexpected token } 
    at Object.parse (native) 
    at Object.<anonymous> (/home/james/devel/tests/node/test.js:4:10) 
    at Module._compile (module.js:449:26) 
    at Object.Module._extensions..js (module.js:467:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.runMain (module.js:492:10) 
    at process.startup.processNextTick.process._tickCallback (node.js:244:9) 

Sie können nehmen Sie Ihre Wahl :-)

Prost,

James.