2017-12-24 8 views
-1

Ich verbessere meine Fehlerbehandlung in Node.js/express.Dateiname in Zeilennummer im Trace-Stack holen/Fehlerobjekt

Gibt es eine Möglichkeit, den Dateinamen und die Zeilennummer zu erhalten, wo dieser Fehler in meinem Code aufgetreten ist?

error-handler.js, mit console.trace, ist nur die Route, die Fehler behandelt ... nicht, wo der Fehler tatsächlich passiert ist.


class FacebookErr extends Error { 
    constructor(httpCode, ...args) { 
    super(...args) 
    Error.captureStackTrace(this, FacebookErr); 
    this.name = 'FacebookErr'; 
    this.date = new Date(); 
    this.httpCode = httpCode; 
    } 
} 

fetch(uri) 
    .then(status) 
    .then(toJson) 
    .then(getUserInfo) 
    .catch((err) => { 
     next(new FacebookErr(500, err)); 
    }); 

Trace: FacebookErr: ReferenceError: uri is not defined 
    at log (/home/one/github/dolphin/app/error-handler.js:4:11) 
    at Layer.handle_error (/home/one/github/dolphin/node_modules/express/lib/router/layer.js:71:5) 
    at trim_prefix (/home/one/github/dolphin/node_modules/express/lib/router/index.js:315:13) 
    at /home/one/github/dolphin/node_modules/express/lib/router/index.js:284:7 
    at Function.process_params (/home/one/github/dolphin/node_modules/express/lib/router/index.js:335:12) 
    at Immediate.next (/home/one/github/dolphin/node_modules/express/lib/router/index.js:275:10) 
    at Immediate.<anonymous> (/home/one/github/dolphin/node_modules/express/lib/router/index.js:635:15) 
    at runCallback (timers.js:783:20) 
    at tryOnImmediate (timers.js:743:5) 
    at processImmediate [as _immediateCallback] (timers.js:714:5) 
Sun Dec 24 2017 13:39:37 GMT-0600 (CST) 
+0

Ich bin nicht ganz sicher, ob ich verstehen, wie dieses Projekt aufgebaut wurde ... 'FacebookErr' definiert ist, wo ? Wo tritt der Fehler auf? Bitte fügen Sie Ihre Projektstruktur und die obigen Informationen hinzu. – Jeffrey

+0

Es ist definiert als "Klasse FacebookErr erweitert Fehler", siehe Originalbeitrag. Alle gegebenen Informationen sollten ausreichen. – dman

+0

Ganz offensichtlich ist das die korrekte Klassendefinition, ich frage, wo diese Klassendefinition liegt. In welcher Datei befindet sich 'FacebookErr'? Wo ist das in Bezug auf wo der Fehler tatsächlich geworfen wird? – Jeffrey

Antwort

1

regex ... Nachfolgend erhalten Sie die den Dateinamen (vollständiger Pfad), Zeilennummer und Spaltennummer der ersten Datei in die Stapelspur:

const [, filename, line, column ] = err.stack.match(/\/([\/\w-_\.]+\.js):(\d*):(\d*)/) 

Wenn Sie Informationen für die erste Datei in Ihrem Projekt erhalten möchten, nicht ein in node_modules:

const regEx = = new RegExp(`${process.cwd()}\\/(?!node_modules\\/)([\\/\\w-_\\.]+\\.js):(\\d*):(\\d*)`) 
const [, filename, line, column ] = err.stack.match(regEx) 
Verwandte Themen