Știe cineva cum să imprimați un stack trace în Node.js?
Acum nu's a dedicat funcția pe consola pentru că:
console.trace()
Ca răspuns deja, puteți folosi pur și simplu trace comandă:
console.trace("I am here");
Cu toate acestea, dacă ai venit la această întrebare în căutarea despre cum să vă conectați stivei de excepție, vă puteți conecta pur și simplu obiectul Excepție.
try {
// if something unexpected
throw new Error("Something unexpected has occurred.");
} catch (e) {
console.error(e);
}
Va log:
Eroare: Ceva neașteptat s-a produs. la main (c:\Users\Me\Documents\MyApp\app.js:9:15) la Obiect.
(c:\Users\Me\Documents\MyApp\app.js:17:1) de la Modul._compile (modulul.js:460:26) la Object.Module._extensions..js (modulul.js:478:10) de la Modul.sarcina (modulul.js:355:32) la Funcție.Module._load (modulul.js:310:12) la Funcție.Module.runMain (modulul.js:501:10) la pornire (nod.js:129:16) la nod.js:814:3
Dacă Node.js versiunea este < decât 6.0.0, exploatarea Excepția obiect nu va fi suficient. În acest caz, se va imprima numai:
[Eroare: Ceva neașteptat s-a produs.]
Pentru Nodul versiune < 6, folosesc consola.de eroare(e.stiva) "în loc de" consola.de eroare(e) pentru a imprima un mesaj de eroare de plus full stack, ca Nodul curent versiune are.
Notă: în cazul în care excepția este creat ca un șir de caractere ca arunc "myException"
, l's nu este posibil pentru a prelua stivei și exploatarea `e.stiva randamentele nedefinit.
Pentru a fi în siguranță, puteți folosi
console.error(e.stack || e);
și se va lucra pentru noi și vechi Node.js versiunile.
Pentru a imprima stacktrace de Eroare
în consolă în mod mai ușor de citit:
console.log(ex, ex.stack.split("\n"));
Exemplu de rezultat:
[Error] [ 'Error',
' at repl:1:7',
' at REPLServer.self.eval (repl.js:110:21)',
' at Interface.<anonymous> (repl.js:239:12)',
' at Interface.EventEmitter.emit (events.js:95:17)',
' at Interface._onLine (readline.js:202:10)',
' at Interface._line (readline.js:531:8)',
' at Interface._ttyWrite (readline.js:760:14)',
' at ReadStream.onkeypress (readline.js:99:10)',
' at ReadStream.EventEmitter.emit (events.js:98:17)',
' at emitKey (readline.js:1095:12)' ]
Cu un ușor Nod disponibil în modul, este posibil pentru a obține full-length stivă de Nod (deși cu un minor penalizare de performanță): http://www.mattinsler.com/post/26396305882/announcing-longjohn-long-stack-traces-for-node-js
Pentru ceea ce știu imprimarea completă stivei în nodejs nu este posibil, puteți imprima doar o "partial" stack trace-ul, nu se poate vedea de unde ai venit de la, în cod, doar în cazul în care Excepția apară. Ca's ce Ryan Dahl explică în acest video de pe youtube.
la min 56:30 pentru a fi precis. Sper că acest lucru vă ajutăÎncerca Eroare.captureStackTrace(targetObject[, constructorOpt]).
const myObj = {};
function c() {
// pass
}
function b() {
Error.captureStackTrace(myObj)
c()
}
function a() {
b()
}
a()
console.log(myObj.stack)
Funcția " a " și " b " sunt capturate în stiva de eroare și stocate în myObj
.
Dacă doriți să conectați doar stivei de eroare (și nu, mesajul de eroare) Nodul 6 și de mai sus include automat eroarea numele și mesajul în interiorul stivei, care este un pic enervant, dacă vrei să faci ceva personalizat eroare de manipulare:
consola.log(eroare.stivă.înlocui(eroare.mesaj, ''))
Această soluție se va conecta numai eroarea numele și stack trace (astfel încât să puteți, de exemplu, formatul de mesaj de eroare și afișa cum vrei în altă parte în cod).
Exemplul de mai sus s-ar imprima numai eroarea numele urmați de stack trace-ul, de exemplu:
Error:
at /Users/cfisher/Git/squashed/execProcess.js:6:17
at ChildProcess.exithandler (child_process.js:213:5)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:877:16)
at Socket.<anonymous> (internal/child_process.js:334:11)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at Pipe._handle.close [as _onclose] (net.js:498:12)
În loc de:
Error: Error: Command failed: sh ./commands/getBranchCommitCount.sh HEAD
git: 'rev-lists' is not a git command. See 'git --help'.
Did you mean this?
rev-list
at /Users/cfisher/Git/squashed/execProcess.js:6:17
at ChildProcess.exithandler (child_process.js:213:5)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:877:16)
at Socket.<anonymous> (internal/child_process.js:334:11)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at Pipe._handle.close [as _onclose] (net.js:498:12)
@isaacs răspunsul este corect, dar am mai răspuns corect. Acest răspuns este inspirat de codul sursă original de Consola de la clasa node js (source code):
function getStack() {
var err = new Error();
Error.captureStackTrace(err, getStack);
return err.stack;
}
În cazul în care cineva este încă în căutarea pentru acest lucru ca am fost, atunci nu este un modul, putem folosi numit "stack-trace". Este foarte popular. NPM Link
Apoi plimbare prin urme.
var stackTrace = require('stack-trace');
.
.
.
var trace = stackTrace.get();
trace.map(function (item){
console.log(new Date().toUTCString() + ' : ' + item.toString() );
});
Sau pur și simplu imprima urme:
var stackTrace = require('stack-trace');
.
.
.
var trace = stackTrace.get();
trace.toString();
puteți utiliza nod-stack-trace modulul care este o putere maximă modul de a urmări apel stive.