{"id":48766,"date":"2022-03-17T09:57:42","date_gmt":"2022-03-17T08:57:42","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=48766&#038;preview=true&#038;preview_id=48766"},"modified":"2023-08-18T10:22:48","modified_gmt":"2023-08-18T09:22:48","slug":"node-debug","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/node-debug\/","title":{"rendered":"Wie man Node.js-Code mit mehreren Tools debuggt"},"content":{"rendered":"<p><a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-node-js\/\">Node.js ist eine JavaScript-Laufzeitumgebung<\/a>, die auf der gleichen V8-Engine basiert, die auch im Chrome-Browser von Google verwendet wird. Sie wird h\u00e4ufig f\u00fcr die Entwicklung von plattform\u00fcbergreifenden serverseitigen und Terminal-Anwendungen verwendet. <a href=\"https:\/\/kinsta.com\/de\/blog\/node-js-apps\/\">Node.js ist in den letzten zehn Jahren immer beliebter geworden<\/a>, weil es <a href=\"https:\/\/kinsta.com\/de\/blog\/so-installierst-du-node-js\/\">einfach zu installieren<\/a>, praktisch und schnell ist und es Webentwicklern auf der Client-Seite erm\u00f6glicht, <a href=\"https:\/\/kinsta.com\/de\/blog\/node-js-entwicklern-gehalt\/\">ihre F\u00e4higkeiten anderweitig zu nutzen<\/a>.<\/p>\n<p>Allerdings ist die Softwareentwicklung nach wie vor eine komplexe Aufgabe, und dein Node.js-Code wird irgendwann einmal scheitern. In diesem Lernprogramm werden verschiedene Tools vorgestellt, mit denen du Anwendungen debuggen und die Ursache eines Problems finden kannst.<\/p>\n<p>Fangen wir gleich an.<\/p>\n<h3>Schau dir unsere Videoanleitung zum <a href=\"https:\/\/www.youtube.com\/watch?v=Kz8EB9Lhul8\">Debuggen von Node.js-Code<\/a> an<\/h3>\n<kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=Kz8EB9Lhul8\"><\/kinsta-video>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p><br \/>\n<a href=\"https:\/\/deno.land\/\" target=\"_blank\" rel=\"noopener noreferrer\">Deno<\/a> ist eine alternative JavaScript-Laufzeitumgebung. Sie \u00e4hnelt Node.js, ist aber neuer und gleicht einige Risse und Ungereimtheiten aus. Die unten stehenden Tools und Informationen k\u00f6nnen oft auf Deno-Anwendungen und Node.js angewendet werden.<br \/><\/p>\n<\/aside>\n\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Debugging \u00dcberblick<\/h2>\n<p>&#8222;Debugging&#8220; ist die Bezeichnung f\u00fcr die verschiedenen M\u00f6glichkeiten, Softwarefehler zu beheben. Einen Fehler zu beheben, ist oft ganz einfach. Die Ursache des Fehlers zu finden, kann wesentlich komplexer sein und viele Stunden Kopfzerbrechen verursachen.<\/p>\n<p>In den folgenden Abschnitten werden drei allgemeine Fehlertypen beschrieben, denen du begegnen wirst.<\/p>\n<h3>Syntax-Fehler<\/h3>\n<p>Dein Code h\u00e4lt sich nicht an die Regeln der Sprache &#8211; zum Beispiel, wenn du eine schlie\u00dfende Klammer ausl\u00e4sst oder eine Anweisung wie <code>console.lag(x)<\/code> falsch schreibst.<\/p>\n<p>Ein guter Code-Editor kann dabei helfen, h\u00e4ufige Probleme zu erkennen:<\/p>\n<ul>\n<li>Farbliche Kennzeichnung von g\u00fcltigen und ung\u00fcltigen Anweisungen<\/li>\n<li>Typpr\u00fcfung von Variablen<\/li>\n<li>Automatische Vervollst\u00e4ndigung von Funktions- und Variablennamen<\/li>\n<li>Hervorheben passender Klammern<\/li>\n<li>Automatische Einr\u00fcckung von Codebl\u00f6cken<\/li>\n<li>Erkennen von unerreichbarem Code<\/li>\n<li>Refactoring unsauberer Funktionen<\/li>\n<\/ul>\n<p><a href=\"https:\/\/kinsta.com\/de\/blog\/kostenlose-html-editoren\/\">Kostenlose Editoren<\/a> wie <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">VS Code<\/a> und <a href=\"https:\/\/atom.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Atom<\/a> bieten eine gute Unterst\u00fctzung f\u00fcr Node.js, JavaScript und TypeScript (das sich in JavaScript \u00fcbertragen l\u00e4sst). Grundlegende Syntaxprobleme k\u00f6nnen in der Regel erkannt werden, bevor du deinen Code speicherst und testest.<\/p>\n<p>Ein Code-Linter wie <a href=\"https:\/\/eslint.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">ESLint<\/a> meldet auch Syntaxfehler, schlechte Einr\u00fcckungen und nicht deklarierte Variablen. ESLint ist ein Node.js-Tool, das du global installieren kannst:<\/p>\n<pre><code class=\"language-bash\">npm i eslint -g<\/code><\/pre>\n<p>Du kannst JavaScript-Dateien von der Kommandozeile aus \u00fcberpr\u00fcfen:<\/p>\n<pre><code class=\"language-bash\">eslint mycode.js<\/code><\/pre>\n<p>&#8230;aber es ist einfacher, ein Editor-Plugin wie <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=dbaeumer.vscode-eslint\" target=\"_blank\" rel=\"noopener noreferrer\">ESLint f\u00fcr VS Code<\/a> oder <a href=\"https:\/\/atom.io\/packages\/linter-eslint\" target=\"_blank\" rel=\"noopener noreferrer\">linter-eslint f\u00fcr Atom<\/a> zu verwenden, die den Code automatisch w\u00e4hrend der Eingabe \u00fcberpr\u00fcfen:<\/p>\n<figure id=\"attachment_115102\" aria-describedby=\"caption-attachment-115102\" style=\"width: 913px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115102 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/eslint-vscode.png\" alt=\"ESlint in VS Code.\" width=\"913\" height=\"564\"><figcaption id=\"caption-attachment-115102\" class=\"wp-caption-text\">ESlint in VS Code.<\/figcaption><\/figure>\n<h3>Logik-Fehler<\/h3>\n<p>Dein Code l\u00e4uft, aber er funktioniert nicht so, wie du es erwartest. Zum Beispiel wird ein Benutzer nicht abgemeldet, wenn er es verlangt; ein Bericht zeigt falsche Zahlen an; Daten werden nicht vollst\u00e4ndig in einer Datenbank gespeichert; usw.<\/p>\n<p>Logikfehler k\u00f6nnen verursacht werden durch:<\/p>\n<ul>\n<li>Verwendung der falschen Variablen<\/li>\n<li>Falsche Bedingungen, z. B. <code>if (a &gt; 5)<\/code> statt <code>if (a &lt; 5)<\/code><\/li>\n<li>Berechnungen, die den Vorrang von Operatoren nicht ber\u00fccksichtigen, z. B. <code>1+2*3<\/code> ergibt 7 statt 9.<\/li>\n<\/ul>\n\n<h3>Laufzeitfehler (oder Ausf\u00fchrungsfehler)<\/h3>\n<p>Ein Fehler wird erst sichtbar, wenn die Anwendung ausgef\u00fchrt wird, was oft zu einem Absturz f\u00fchrt. Laufzeitfehler k\u00f6nnen verursacht werden durch:<\/p>\n<ul>\n<li>Dividieren durch eine Variable, die auf Null gesetzt wurde<\/li>\n<li>Der Versuch, auf ein Array-Element zuzugreifen, das nicht existiert<\/li>\n<li>Versuch, in eine schreibgesch\u00fctzte Datei zu schreiben<\/li>\n<\/ul>\n<p>Logik- und Laufzeitfehler sind schwieriger zu erkennen, aber die folgenden Entwicklungstechniken k\u00f6nnen helfen:<\/p>\n<ol>\n<li><strong>Verwende testgetriebene Entwicklung:<\/strong> TTD ermutigt dich, Tests zu schreiben, bevor eine Funktion entwickelt wird, z.B. X wird von FunktionY zur\u00fcckgegeben, wenn Z als Parameter \u00fcbergeben wird. Diese Tests werden w\u00e4hrend der ersten Entwicklung und bei sp\u00e4teren Aktualisierungen durchgef\u00fchrt, um sicherzustellen, dass der Code weiterhin wie erwartet funktioniert.<\/li>\n<li><strong>Verwende ein Fehlerverfolgungssystem: <\/strong>Es gibt nichts Schlimmeres als eine E-Mail, in der steht <i>: &#8222;Deine Software funktioniert nicht&#8220;<\/i>! Problemverfolgungssysteme erm\u00f6glichen es dir, bestimmte Probleme zu erfassen, Reproduktionsschritte zu dokumentieren, Priorit\u00e4ten festzulegen, Entwickler zuzuweisen und den Fortschritt der Korrekturen zu verfolgen.<\/li>\n<li><strong>Verwende die Versionskontrolle: <\/strong>Ein Versionskontrollsystem <a href=\"https:\/\/kinsta.com\/de\/blog\/git-vs-github\/\">wie Git<\/a> hilft dir, den Code zu sichern, Revisionen zu verwalten und festzustellen, wo ein Fehler aufgetreten ist. Online-Repositories wie <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-github\/\">Github<\/a> und <a href=\"https:\/\/kinsta.com\/de\/blog\/bitbucket-vs-github\/\">Bitbucket<\/a> bieten kostenlosen Speicherplatz und Tools f\u00fcr kleinere oder Open-Source-Projekte.<\/li>\n<\/ol>\n<p>Du wirst immer noch auf Node.js-Fehler sto\u00dfen, aber die folgenden Abschnitte beschreiben, wie du den schwer fassbaren Fehler finden kannst.<\/p>\n<h2>Geeignete Node.js-Umgebungsvariablen setzen<\/h2>\n<p>Umgebungsvariablen, die im Host-Betriebssystem gesetzt werden, k\u00f6nnen die Einstellungen von Node.js-Anwendungen und -Modulen steuern. Die gebr\u00e4uchlichste ist <code>NODE_ENV<\/code>, die beim Debuggen normalerweise auf &#8222;Development&#8220; und beim Betrieb auf einem Live-Server auf &#8222;Production&#8220; gesetzt wird. Setze Umgebungsvariablen auf macOS oder Linux mit dem <a href=\"https:\/\/kinsta.com\/de\/blog\/linux-befehle\/\">Befehl<\/a>:<\/p>\n<pre><code class=\"language-js\">NODE_ENV=development<\/code><\/pre>\n<p>oder in der (klassischen) Windows-Eingabeaufforderung:<\/p>\n<pre><code class=\"language-js\">set NODE_ENV=development<\/code><\/pre>\n<p>oder Windows Powershell:<\/p>\n<pre><code class=\"language-js\">$env:NODE_ENV=\"development\"<\/code><\/pre>\n<p>Im beliebten <a href=\"http:\/\/expressjs.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Express.js-Framework<\/a> deaktiviert die Einstellung NODE_ENV auf development das Zwischenspeichern von Vorlagendateien und gibt ausf\u00fchrliche Fehlermeldungen aus, was beim Debuggen hilfreich sein kann. Andere Module bieten m\u00f6glicherweise \u00e4hnliche Funktionen, und du kannst eine NODE_ENV-Bedingung zu deinen Anwendungen hinzuf\u00fcgen, z. B.<\/p>\n<pre><code class=\"language-js\">\/\/ running in development mode?\nconst devMode = (process.env.NODE_ENV !== 'production');\n\nif (devMode) {\n  console.log('application is running in development mode');\n}\n<\/code><\/pre>\n<p>Du kannst auch die <a href=\"https:\/\/nodejs.org\/api\/util.html#utildebuglogsection-callback\" target=\"_blank\" rel=\"noopener noreferrer\">util.debuglog-Methode<\/a> von Node verwenden, um bedingt Fehlermeldungen auszugeben, z. B.<\/p>\n<pre><code class=\"language-js\">import { debuglog } from 'util';\nconst myappDebug = debuglog('myapp');\nmyappDebug('log something');\n<\/code><\/pre>\n<p>Diese Anwendung gibt die Logmeldung nur aus, wenn NODE_DEBUG auf myapp oder einen Platzhalter wie * oder my* gesetzt ist.<\/p>\n<h2>Node.js Kommandozeilenoptionen verwenden<\/h2>\n<p>Node-Skripte werden in der Regel mit node gefolgt vom Namen des Eingangsskripts gestartet:<\/p>\n<pre><code class=\"language-js\">node app.js<\/code><\/pre>\n<p>Du kannst auch <a href=\"https:\/\/nodejs.org\/api\/cli.html\" target=\"_blank\" rel=\"noopener noreferrer\">Kommandozeilenoptionen<\/a> setzen, um verschiedene Aspekte der Laufzeit zu steuern. N\u00fctzliche Flags f\u00fcr das Debugging sind zum Beispiel:<\/p>\n<ul>\n<li><code>--check<\/code><br \/>\nSyntaxpr\u00fcfung des Skripts ohne Ausf\u00fchren<\/li>\n<li><code>--trace-warnings<\/code><br \/>\neinen Stack-Trace ausgeben, wenn JavaScript Promises nicht aufgel\u00f6st oder zur\u00fcckgewiesen werden<\/li>\n<li><code>--enable-source-maps<\/code><br \/>\nQuelltexte anzeigen, wenn ein Transpiler wie TypeScript verwendet wird<\/li>\n<li><code>--throw-deprecation<\/code><br \/>\nwarnen, wenn veraltete Node.js-Funktionen verwendet werden<\/li>\n<li><code>--redirect-warnings=file<\/code><br \/>\nWarnungen in eine Datei statt in stderr ausgeben<\/li>\n<li><code>--trace-exit<\/code><br \/>\neinen Stack-Trace ausgeben, wenn <code>process.exit()<\/code> aufgerufen wird.<\/li>\n<\/ul>\n<h2>Nachrichten auf der Konsole ausgeben<\/h2>\n<p>Die Ausgabe einer Konsolenmeldung ist eine der einfachsten M\u00f6glichkeiten, eine Node.js-Anwendung zu debuggen:<\/p>\n<pre><code class=\"language-js\">console.log(`someVariable: ${ someVariable }`);<\/code><\/pre>\n<p>Nur wenige Entwickler wissen, dass es noch viele andere Konsolen-Methoden gibt:<\/p>\n<div class=\"responsive-table\">\n<table>\n<thead>\n<tr>\n<th>Konsolen-Methode<\/th>\n<th>Beschreibung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>.log(msg)<\/code><\/td>\n<td>Standard-Konsolenmeldung<\/td>\n<\/tr>\n<tr>\n<td><code>.log('%j', obj)<\/code><\/td>\n<td>Objekt als kompakten JSON-String ausgeben<\/td>\n<\/tr>\n<tr>\n<td><code>.dir(obj, opt)<\/code><\/td>\n<td>Pretty-print Objekteigenschaften<\/td>\n<\/tr>\n<tr>\n<td><code>.table(obj)<\/code><\/td>\n<td>Arrays und Objekte im Tabellenformat ausgeben<\/td>\n<\/tr>\n<tr>\n<td><code>.error(msg)<\/code><\/td>\n<td>eine Fehlermeldung<\/td>\n<\/tr>\n<tr>\n<td><code>.count(label)<\/code><\/td>\n<td>einen benannten Z\u00e4hler inkrementieren und ausgeben<\/td>\n<\/tr>\n<tr>\n<td><code>.countReset(label)<\/code><\/td>\n<td>einen benannten Z\u00e4hler zur\u00fccksetzen<\/td>\n<\/tr>\n<tr>\n<td><code>.group(label)<\/code><\/td>\n<td>eine Gruppe von Meldungen einr\u00fccken<\/td>\n<\/tr>\n<tr>\n<td><code>.groupEnd(label)<\/code><\/td>\n<td>beenden einer Gruppe<\/td>\n<\/tr>\n<tr>\n<td><code>.time(label)<\/code><\/td>\n<td>einen benannten Timer starten<\/td>\n<\/tr>\n<tr>\n<td><code>.timeLog(label)<\/code><\/td>\n<td>meldet die verstrichene Zeit<\/td>\n<\/tr>\n<tr>\n<td><code>.timeEnd(label)<\/code><\/td>\n<td>einen benannten Timer stoppen<\/td>\n<\/tr>\n<tr>\n<td><code>.trace()<\/code><\/td>\n<td>einen Stack-Trace ausgeben (eine Liste aller Funktionsaufrufe)<\/td>\n<\/tr>\n<tr>\n<td><code>.clear()<\/code><\/td>\n<td>die Konsole l\u00f6schen<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><code>console.log()<\/code> akzeptiert auch eine Liste von kommagetrennten Werten:<\/p>\n<pre><code class=\"language-js\">let x = 123;\nconsole.log('x:', x);\n\/\/ x: 123\n<\/code><\/pre>\n<p>&#8230;obwohl die ES6-Destrukturierung eine \u00e4hnliche Ausgabe mit weniger Aufwand bietet:<\/p>\n<pre><code class=\"language-js\">console.log({ x });\n\/\/ { x: 123 }\n<\/code><\/pre>\n<p>Der Befehl <strong>console.dir()<\/strong> druckt Objekteigenschaften auf die gleiche Weise aus wie <a href=\"https:\/\/nodejs.org\/api\/util.html#utilinspectobject-options\" target=\"_blank\" rel=\"noopener noreferrer\">util.inspect()<\/a>:<\/p>\n<pre><code class=\"language-js\">console.dir(myObject, { depth: null, color: true });<\/code><\/pre>\n<h3>Kontroverse \u00fcber die Konsole<\/h3>\n<p>Einige Entwickler behaupten, dass du <code>console.log()<\/code> <i>nie<\/i> benutzen solltest, weil:<\/p>\n<ul>\n<li>Du \u00e4nderst Code und k\u00f6nntest etwas ver\u00e4ndern oder vergessen, es zu entfernen, und<\/li>\n<li>Es nicht n\u00f6tig ist, wenn es bessere Debugging-Optionen gibt.<\/li>\n<\/ul>\n<p>Glaube niemandem, der behauptet, dass er <code>console.log()<\/code> nie benutzt! Logging ist schnell und schmutzig, aber jeder benutzt es irgendwann. Verwende das Werkzeug oder die Technik, die du bevorzugst. Das Beheben eines Fehlers ist wichtiger als die Methode, mit der du ihn findest.<\/p>\n<h2>Verwende ein Logging-System eines Drittanbieters<\/h2>\n<p>Logging-Systeme von Drittanbietern bieten ausgefeiltere Funktionen wie Meldungsebenen, Ausf\u00fchrlichkeit, Sortierung, Dateiausgabe, Profilerstellung, Berichte und mehr. Beliebte L\u00f6sungen sind <a href=\"https:\/\/www.npmjs.com\/package\/cabin\" target=\"_blank\" rel=\"noopener noreferrer\">cabin<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/loglevel\" target=\"_blank\" rel=\"noopener noreferrer\">loglevel<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/morgan\" target=\"_blank\" rel=\"noopener noreferrer\">morgan<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/pino\" target=\"_blank\" rel=\"noopener noreferrer\">pino<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/signale\" target=\"_blank\" rel=\"noopener noreferrer\">signale<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/storyboard\" target=\"_blank\" rel=\"noopener noreferrer\">storyboard<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/tracer\" target=\"_blank\" rel=\"noopener noreferrer\">tracer<\/a> und <a href=\"https:\/\/www.npmjs.com\/package\/winston\" target=\"_blank\" rel=\"noopener noreferrer\">winston<\/a>.<\/p>\n<h2>Nutze den V8 Inspector<\/h2>\n<p>Die V8 JavaScript Engine bietet einen <a href=\"https:\/\/nodejs.org\/api\/debugger.html\" target=\"_blank\" rel=\"noopener noreferrer\">Debugging-Client<\/a>, den du in Node.js verwenden kannst. Starte eine Anwendung mit Node Inspect, z.B.<\/p>\n<pre><code class=\"language-js\">node inspect app.js<\/code><\/pre>\n<p>Der Debugger h\u00e4lt bei der ersten Zeile an und zeigt einen Debug&gt;-Prompt an:<\/p>\n<pre><code class=\"language-js\">$ node inspect .\\mycode.js\n&lt; Debugger listening on ws:\/\/127.0.0.1:9229\/143e23fb\n&lt; For help, see: https:\/\/nodejs.org\/en\/docs\/inspector\n&lt;\n ok\n&lt; Debugger attached.\n&lt;\nBreak on start in mycode.js:1\n&gt; 1 const count = 10;\n  2\n  3 for (i = 0; i &lt; counter; i++) {\ndebug&gt;\n<\/code><\/pre>\n<p>Gib Hilfe ein, um eine Liste der Befehle anzuzeigen. Du kannst durch die Anwendung schreiten, indem du eingibst:<\/p>\n<ul>\n<li><strong>cont<\/strong> oder <strong>c<\/strong>: Ausf\u00fchrung fortsetzen<\/li>\n<li><strong>next<\/strong> oder <strong>n<\/strong>: f\u00fchre den n\u00e4chsten Befehl aus<\/li>\n<li><strong>step<\/strong> oder <strong>s<\/strong>: in eine aufgerufene Funktion einsteigen<\/li>\n<li><strong>out<\/strong> oder <strong>o<\/strong>: Aus einer Funktion aussteigen und zur aufrufenden Anweisung zur\u00fcckkehren<\/li>\n<li><strong>pause<\/strong>: den laufenden Code unterbrechen<\/li>\n<li><strong>watch(&#8218;myvar&#8216;)<\/strong>: eine Variable beobachten<\/li>\n<li><strong>setBreakPoint()<\/strong> oder <strong>sb()<\/strong>: Setzt einen Haltepunkt<\/li>\n<li><strong>restart<\/strong>: das Skript neu starten<\/li>\n<li><strong>.exit<\/strong> oder <strong>Ctrl | Cmd + D<\/strong>: den Debugger verlassen<\/li>\n<\/ul>\n<p>Zugegeben, diese Debugging-Option ist zeitaufw\u00e4ndig und unhandlich. Verwende sie nur, wenn es keine andere M\u00f6glichkeit gibt, z. B. wenn du Code auf einem entfernten Server ausf\u00fchrst und keine Verbindung von einem anderen Ort aus herstellen oder zus\u00e4tzliche Software installieren kannst.<\/p>\n<h2>Den Chrome-Browser zum Debuggen von Node.js-Code verwenden<\/h2>\n<p>Die oben verwendete Option Node.js inspect startet einen Web Socket Server, der auf localhost port 9229 lauscht. Sie startet auch einen textbasierten Debugging-Client, aber es ist auch m\u00f6glich, grafische Clients zu verwenden &#8211; wie den <a href=\"https:\/\/kinsta.com\/de\/blog\/element-untersuchen\/\">in Google Chrome und Chrome-basierten Browsern<\/a> wie Chromium, Edge, Opera, Vivaldi und <a href=\"https:\/\/kinsta.com\/de\/blog\/brave-browser-review\/\">Brave<\/a> eingebauten.<\/p>\n<p>Um eine typische Webanwendung zu debuggen, starte sie mit der Option &#8211;inspect, um den Web Socket Server des V8 Debuggers zu aktivieren:<\/p>\n<pre><code class=\"language-js\">node --inspect index.js<\/code><\/pre>\n<p>Hinweis:<\/p>\n<ul>\n<li>index.js ist vermutlich das Einstiegsskript der Anwendung.<\/li>\n<li>Achte darauf, dass du <code>--inspect<\/code> mit doppelten Bindestrichen verwendest, um sicherzustellen, dass du nicht den textbasierten Debugger-Client startest.<\/li>\n<li>Du kannst <a href=\"https:\/\/nodemon.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">nodemon<\/a> anstelle von node verwenden, wenn du die Anwendung automatisch neu starten willst, wenn eine Datei ge\u00e4ndert wird.<\/li>\n<\/ul>\n<p>Standardm\u00e4\u00dfig akzeptiert der Debugger nur eingehende Verbindungen von der lokalen Maschine. Wenn du die Anwendung auf einem anderen Ger\u00e4t, einer virtuellen Maschine oder einem Docker-Container ausf\u00fchrst, verwende:<\/p>\n<pre><code class=\"language-js\">node --inspect=0.0.0.0:9229 index.js<\/code><\/pre>\n<figure id=\"attachment_115105\" aria-describedby=\"caption-attachment-115105\" style=\"width: 907px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115105 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/node-inspect.png\" alt=\"Node Inspect Option.\" width=\"907\" height=\"339\"><figcaption id=\"caption-attachment-115105\" class=\"wp-caption-text\">Node Inspect Option.<\/figcaption><\/figure>\n<p>Du kannst auch <code>--inspect-brk<\/code> anstelle von <code>--inspect<\/code> verwenden, um die Verarbeitung in der ersten Zeile anzuhalten (einen Haltepunkt zu setzen), damit du den Code von Anfang an durchgehen kannst.<\/p>\n<p>\u00d6ffne einen Chrome-basierten Browser und gib <code>chrome:\/\/inspect<\/code> in die Adressleiste ein, um lokale und vernetzte Ger\u00e4te anzuzeigen:<\/p>\n<figure id=\"attachment_115106\" aria-describedby=\"caption-attachment-115106\" style=\"width: 911px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115106 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-inspect.png\" alt=\"Chrome Inspektionstool.\" width=\"911\" height=\"409\"><figcaption id=\"caption-attachment-115106\" class=\"wp-caption-text\">Chrome Inspektionstool.<\/figcaption><\/figure>\n<p>Wenn deine Node.js-Anwendung auch nicht als <strong>Remote Target<\/strong> angezeigt wird:<\/p>\n<ul>\n<li>Klicke auf Dedicated DevTools for Node \u00f6ffnen und w\u00e4hle die Adresse und den Port, oder<\/li>\n<li>Aktiviere <strong>Netzwerkziele erkennen<\/strong>, klicke auf <strong>Konfigurieren<\/strong> und f\u00fcge dann die IP-Adresse und den Port des Ger\u00e4ts hinzu, auf dem die Anwendung l\u00e4uft.<\/li>\n<\/ul>\n<p>Klicke auf den <strong>Inspektionslink<\/strong> des Ziels, um den DevTools Debugger Client zu starten. Das sollte jedem bekannt vorkommen, der DevTools zum Debuggen von Client-seitigem Code verwendet hat:<\/p>\n<figure id=\"attachment_115107\" aria-describedby=\"caption-attachment-115107\" style=\"width: 920px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115107 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-devtools.png\" alt=\"Chrome DevTools.\" width=\"920\" height=\"550\"><figcaption id=\"caption-attachment-115107\" class=\"wp-caption-text\">Chrome DevTools.<\/figcaption><\/figure>\n<p>Wechsle zum <strong>Quellen-Panel<\/strong>. Du kannst jede Datei \u00f6ffnen, indem du Cmd | Strg + P dr\u00fcckst und den Dateinamen eingibst (z. B. index.js).<\/p>\n<p>Es ist jedoch einfacher, deinen Projektordner zum Arbeitsbereich hinzuzuf\u00fcgen. So kannst du Dateien direkt aus DevTools laden, bearbeiten und speichern (ob du das f\u00fcr eine gute Idee h\u00e4ltst, ist eine andere Frage!)<\/p>\n<ol>\n<li>Klicke auf <strong>+ Ordner zum Arbeitsbereich hinzuf\u00fcgen<\/strong><\/li>\n<li>W\u00e4hle den Ort deines Node.js-Projekts<\/li>\n<li>Klicke auf <strong>Zustimmen <\/strong>, um Datei\u00e4nderungen zuzulassen<\/li>\n<\/ol>\n<p>Du kannst jetzt Dateien aus dem linken Verzeichnisbaum laden:<\/p>\n<figure id=\"attachment_115113\" aria-describedby=\"caption-attachment-115113\" style=\"width: 1167px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115113 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-sources-2.png\" alt=\"Chrome DevTools Sources Panel.\" width=\"1167\" height=\"843\"><figcaption id=\"caption-attachment-115113\" class=\"wp-caption-text\">Chrome DevTools Sources Panel.<\/figcaption><\/figure>\n<p>Klicke auf eine beliebige Zeilennummer, um einen Haltepunkt zu setzen, der durch eine blaue Markierung gekennzeichnet ist.<\/p>\n<p>Das Debugging basiert auf <i>Haltepunkten<\/i>. Sie geben an, an welchen Stellen der Debugger die Programmausf\u00fchrung unterbrechen und den aktuellen Zustand des Programms anzeigen soll (Variablen, Aufrufstapel usw.)<\/p>\n<p>Du kannst eine beliebige Anzahl von Haltepunkten in der Benutzeroberfl\u00e4che definieren. Eine andere M\u00f6glichkeit ist, eine Debugger; Anweisung in deinen Code einzuf\u00fcgen, die anh\u00e4lt, wenn ein Debugger angeschlossen wird.<\/p>\n<p>Lade und benutze deine Webanwendung, um zu der Anweisung zu gelangen, an der ein Haltepunkt gesetzt wurde. Im Beispiel hier wird <a href=\"http:\/\/localhost:3000\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:3000\/<\/a> in einem beliebigen Browser ge\u00f6ffnet und DevTools h\u00e4lt die Ausf\u00fchrung in Zeile 44 an:<\/p>\n<figure id=\"attachment_115114\" aria-describedby=\"caption-attachment-115114\" style=\"width: 1167px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115114 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-breakpoint.png\" alt=\"Chrome Breakpoint.\" width=\"1167\" height=\"843\"><figcaption id=\"caption-attachment-115114\" class=\"wp-caption-text\">Chrome Breakpoint.<\/figcaption><\/figure>\n<p>Das rechte Feld zeigt:<\/p>\n<ul>\n<li>Eine Reihe von Aktionssymbolen (siehe unten).<\/li>\n<li>Im <strong>Watch-Fenster<\/strong> kannst du Variablen \u00fcberwachen, indem du auf das <strong>+<\/strong> klickst und ihre Namen eingibst.<\/li>\n<li>Ein <strong>Breakpoints-Fenster<\/strong> zeigt eine Liste aller Breakpoints an und erm\u00f6glicht es, sie zu aktivieren oder zu deaktivieren.<\/li>\n<li>Der <strong>Bereich Scope<\/strong> zeigt den Zustand aller lokalen, Modul- und globalen Variablen an. Diesen Bereich wirst du am h\u00e4ufigsten einsehen.<\/li>\n<li>Ein <strong>Call Stack-Fenster<\/strong> zeigt die Hierarchie der Funktionen, die aufgerufen wurden, um diesen Punkt zu erreichen.<\/li>\n<\/ul>\n<p>Eine Reihe von Aktionssymbolen wird \u00fcber <strong>Pausiert am Haltepunkt<\/strong> angezeigt:<\/p>\n<figure id=\"attachment_115115\" aria-describedby=\"caption-attachment-115115\" style=\"width: 625px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115115 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-breakpoint-icons.png\" alt=\"Chrome Haltepunktsymbole.\" width=\"625\" height=\"222\"><figcaption id=\"caption-attachment-115115\" class=\"wp-caption-text\">Chrome Haltepunktsymbole.<\/figcaption><\/figure>\n<p>Von links nach rechts f\u00fchren sie die folgenden Aktionen aus:<\/p>\n<ul>\n<li><strong>Ausf\u00fchrung fortsetzen<\/strong>: Setzt die Verarbeitung bis zum n\u00e4chsten Haltepunkt fort<\/li>\n<li><strong>weitergehen<\/strong>: F\u00fchre den n\u00e4chsten Befehl aus, bleibe aber innerhalb des aktuellen Codeblocks &#8211; springe nicht in eine Funktion, die er aufruft<\/li>\n<li><strong>step into<\/strong>: F\u00fchre den n\u00e4chsten Befehl aus und springe bei Bedarf in eine beliebige Funktion<\/li>\n<li><strong>step out<\/strong>: Die Verarbeitung bis zum Ende der Funktion fortsetzen und zum aufrufenden Befehl zur\u00fcckkehren<\/li>\n<li><strong>step<\/strong>: \u00c4hnlich wie <strong>step into<\/strong>, au\u00dfer dass es nicht in asynchrone Funktionen springt<\/li>\n<li>alle Haltepunkte <strong>deaktivieren<\/strong><\/li>\n<li><strong>pause on exceptions<\/strong>: Die Verarbeitung anhalten, wenn ein Fehler auftritt.<\/li>\n<\/ul>\n<h2>Bedingte Haltepunkte<\/h2>\n<p>Manchmal ist es notwendig, ein wenig mehr Kontrolle \u00fcber Haltepunkte auszu\u00fcben. Stell dir vor, du hast eine Schleife, die 1.000 Iterationen durchlaufen hat, aber du interessierst dich nur f\u00fcr den Zustand der letzten Iteration:<\/p>\n<pre><code class=\"language-js\">\nfor (let i = 0; i &lt; 1000; i++) {\n  \/\/ set breakpoint here\n}\n<\/code><\/pre>\n<p>Anstatt 999 Mal auf &#8220; <strong>Ausf\u00fchrung fortsetzen<\/strong> &#8220; zu klicken, kannst du mit der rechten Maustaste auf die Zeile klicken, &#8220; <strong>Bedingten Haltepunkt hinzuf\u00fcgen<\/strong>&#8220; w\u00e4hlen und eine Bedingung wie <code>i = 999<\/code> eingeben:<\/p>\n<figure id=\"attachment_115116\" aria-describedby=\"caption-attachment-115116\" style=\"width: 979px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115116 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-breakpoint-conditional.png\" alt=\"Chrome bedingter Haltepunkt.\" width=\"979\" height=\"113\"><figcaption id=\"caption-attachment-115116\" class=\"wp-caption-text\">Chrome bedingter Haltepunkt.<\/figcaption><\/figure>\n<p>Chrome zeigt bedingte Haltepunkte nicht blau, sondern gelb an. In diesem Fall wird der Haltepunkt erst bei der letzten Iteration der Schleife ausgel\u00f6st.<\/p>\n<h2>Log-Punkte<\/h2>\n<p>Log-Punkte implementieren console.log() ohne jeglichen Code! Ein Ausdruck kann ausgegeben werden, wenn der Code eine beliebige Zeile ausf\u00fchrt, aber er h\u00e4lt die Verarbeitung nicht an, anders als ein Haltepunkt.<\/p>\n<p>Um einen Log-Punkt hinzuzuf\u00fcgen, klickst du mit der rechten Maustaste auf eine beliebige Zeile, w\u00e4hlst <strong>Log-Punkt hinzuf\u00fcgen<\/strong> und gibst einen Ausdruck ein, z. B. <code>'loop counter i', i<\/code>:<\/p>\n<figure id=\"attachment_115117\" aria-describedby=\"caption-attachment-115117\" style=\"width: 977px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115117 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-logpoint.png\" alt=\"Chrome Log Point.\" width=\"977\" height=\"111\"><figcaption id=\"caption-attachment-115117\" class=\"wp-caption-text\">Chrome Log Point.<\/figcaption><\/figure>\n<p>Die DevTools-Konsole gibt im obigen Beispiel <code>loop counter i: 0<\/code> an <code>loop counter i: 999<\/code> aus.<\/p>\n<h2>VS Code zum Debuggen von Node.js-Anwendungen verwenden<\/h2>\n<p><a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">VS Code<\/a>, oder Visual Studio Code, ist ein kostenloser <a href=\"https:\/\/kinsta.com\/de\/blog\/besten-texteditoren\/\">Code-Editor<\/a> von Microsoft, der bei <a href=\"https:\/\/kinsta.com\/de\/blog\/wie-man-webentwickler-wird\/\">Webentwicklern<\/a> sehr beliebt geworden ist. Die Anwendung ist f\u00fcr Windows, macOS und Linux verf\u00fcgbar und wird mit Webtechnologien im <a href=\"https:\/\/www.electronjs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Electron-Framework<\/a> entwickelt.<\/p>\n<p>VS Code unterst\u00fctzt Node.js und hat einen integrierten Debugging-Client. Die meisten Anwendungen k\u00f6nnen ohne jegliche Konfiguration debuggt werden; der Editor startet automatisch den Debugging-Server und -Client.<\/p>\n<p>\u00d6ffne die Startdatei (z. B. index.js), aktiviere den Bereich <strong>Ausf\u00fchren und Debuggen<\/strong>, klicke auf die Schaltfl\u00e4che <strong>Ausf\u00fchren und Debuggen<\/strong> und w\u00e4hle die <strong>Node.js-Umgebung<\/strong>. Klicke auf eine beliebige Zeile, um einen Haltepunkt zu aktivieren, der als rotes Kreissymbol angezeigt wird. \u00d6ffne dann die Anwendung wie zuvor in einem Browser &#8211; VS Code h\u00e4lt die Ausf\u00fchrung an, wenn der Haltepunkt erreicht ist:<\/p>\n<figure id=\"attachment_115119\" aria-describedby=\"caption-attachment-115119\" style=\"width: 1245px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115119 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/vscode-breakpoint.png\" alt=\"VS Code Haltepunkt.\" width=\"1245\" height=\"881\"><figcaption id=\"caption-attachment-115119\" class=\"wp-caption-text\">VS Code Haltepunkt.<\/figcaption><\/figure>\n<p>Die Bereiche <strong>Variablen<\/strong>, <strong>Beobachten<\/strong>, <strong>Aufrufstack<\/strong> und <strong>Haltepunkte <\/strong>\u00e4hneln denen in <a href=\"https:\/\/kinsta.com\/de\/blog\/element-untersuchen\/\" target=\"_blank\" rel=\"noopener noreferrer\">Chrome DevTools<\/a>. Der Bereich <strong>Geladene Skripte<\/strong> zeigt an, welche Skripte geladen wurden, auch wenn viele davon intern in Node.js sind.<\/p>\n<p>Mit der Symbolleiste mit Aktionssymbolen kannst du:<\/p>\n<ul>\n<li><strong>Ausf\u00fchrung fortsetzen<\/strong>: Setzt die Verarbeitung bis zum n\u00e4chsten Haltepunkt fort<\/li>\n<li><strong>weitergehen<\/strong>: F\u00fchre den n\u00e4chsten Befehl aus, bleibe aber innerhalb der aktuellen Funktion &#8211; springe nicht in eine Funktion, die sie aufruft<\/li>\n<li><strong>step into<\/strong>: F\u00fchre den n\u00e4chsten Befehl aus und springe in jede Funktion, die er aufruft<\/li>\n<li><strong>step out<\/strong>: Die Verarbeitung bis zum Ende der Funktion fortsetzen und zum aufrufenden Befehl zur\u00fcckkehren<\/li>\n<li>die Anwendung und den Debugger <strong>neu starten <\/strong><\/li>\n<li>die Anwendung und den Debugger <strong>anhalten <\/strong><\/li>\n<\/ul>\n<p>Wie bei den Chrome DevTools kannst du mit der rechten Maustaste auf eine beliebige Zeile klicken, um <strong>bedingte Haltepunkte<\/strong> und <strong>Protokollpunkte<\/strong> hinzuzuf\u00fcgen.<\/p>\n<p>Weitere Informationen findest du unter <a href=\"https:\/\/code.visualstudio.com\/docs\/introvideos\/debugging\" target=\"_blank\" rel=\"noopener noreferrer\">Debugging in Visual Studio Code<\/a>.<\/p>\n<h2>VS Code Erweiterte Debugging-Konfiguration<\/h2>\n<p>Weitere VS Code-Konfigurationen k\u00f6nnen erforderlich sein, wenn du Code auf einem anderen Ger\u00e4t oder einer virtuellen Maschine debuggen willst oder alternative Startoptionen wie Nodemon verwenden musst.<\/p>\n<p>VS Code speichert Debugging-Konfigurationen in einer launch.json-Datei in einem <code>.vscode<\/code> Verzeichnis in deinem Projekt. \u00d6ffne den Bereich <strong>Ausf\u00fchren und Debuggen<\/strong>, klicke auf <strong>launch.json-Datei erstellen<\/strong> und w\u00e4hle die <strong>Node.js-Umgebung<\/strong>, um diese Datei zu erstellen. Es wird eine Beispielkonfiguration bereitgestellt:<\/p>\n<figure id=\"attachment_115120\" aria-describedby=\"caption-attachment-115120\" style=\"width: 1245px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115120 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/vscode-launchjson.png\" alt=\"VS Code Debugger Konfiguration.\" width=\"1245\" height=\"881\"><figcaption id=\"caption-attachment-115120\" class=\"wp-caption-text\">VS Code Debugger Konfiguration.<\/figcaption><\/figure>\n<p>Eine beliebige Anzahl von Konfigurationseinstellungen kann als Objekte im Array <code>\"configurations\"<\/code> definiert werden. Klicke auf <strong>Konfiguration hinzuf\u00fcgen<\/strong>&#8230; und w\u00e4hle eine entsprechende Option.<\/p>\n<p>Eine einzelne Node.js-Konfiguration kann entweder:<\/p>\n<ol>\n<li>Selbst einen Prozess starten oder<\/li>\n<li>Anh\u00e4ngen an einen Debugging-Web-Socket-Server, der vielleicht auf einem entfernten Rechner oder Docker-Container l\u00e4uft.<\/li>\n<\/ol>\n<p>Um z.B. eine Nodemon-Konfiguration zu definieren, w\u00e4hle <strong>Node.js: Nodemon Setup<\/strong> und \u00e4ndere ggf. das Skript f\u00fcr den Eintrag &#8222;program&#8220;:<\/p>\n<pre><code class=\"language-js\">{\n  \/\/ custom configuration\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"name\": \"nodemon\",\n      \"program\": \"${workspaceFolder}\/index.js\",\n      \"request\": \"launch\",\n      \"restart\": true,\n      \"runtimeExecutable\": \"nodemon\",\n      \"skipFiles\": [\n        \"&lt;node_internals&gt;\/**\"\n      ],\n      \"type\": \"pwa-node\"\n    }\n  ]\n}\n<\/code><\/pre>\n<p>Speichere die Datei <code>launch.json<\/code> und <strong>nodemon <\/strong>(der &#8222;Name&#8220; der Konfiguration) erscheint in der Dropdown-Liste am oberen Rand des <strong>Ausf\u00fchrungs- und Debug-Bereichs<\/strong>. Klicke auf das gr\u00fcne Ausf\u00fchrungssymbol, um diese Konfiguration zu verwenden und die Anwendung mit Nodemon zu starten:<\/p>\n<figure id=\"attachment_115121\" aria-describedby=\"caption-attachment-115121\" style=\"width: 1245px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115121 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/vscode-nodemon.png\" alt=\"VS Code debuggen mit nodemon.\" width=\"1245\" height=\"876\"><figcaption id=\"caption-attachment-115121\" class=\"wp-caption-text\">VS Code debuggen mit nodemon.<\/figcaption><\/figure>\n<p>Wie zuvor kannst du Haltepunkte, bedingte Haltepunkte und Protokollpunkte hinzuf\u00fcgen. Der Hauptunterschied ist, dass nodemon deinen Server automatisch neu startet, wenn eine Datei ge\u00e4ndert wird.<\/p>\n<p>Weitere Informationen findest du unter <a href=\"https:\/\/code.visualstudio.com\/docs\/editor\/debugging#_launch-configurations\" target=\"_blank\" rel=\"noopener noreferrer\">VS Code Startkonfigurationen<\/a>.<\/p>\n<p>Die folgenden VS Code-Erweiterungen k\u00f6nnen dir auch beim Debuggen von Code helfen, der auf entfernten oder isolierten Serverumgebungen gehostet wird:<\/p>\n<ul>\n<li><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.remote-containers\" target=\"_blank\" rel=\"noopener noreferrer\">Remote &#8211; Container<\/a>: Verbinde dich mit Anwendungen, die in Docker-Containern laufen<\/li>\n<li><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.remote-ssh\" target=\"_blank\" rel=\"noopener noreferrer\">Remote &#8211; SSH<\/a>: Verbinde dich mit Anwendungen, die auf einem entfernten Server laufen<\/li>\n<li><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.remote-wsl\" target=\"_blank\" rel=\"noopener noreferrer\">Remote &#8211; WSL<\/a>: Verbinde dich mit Anwendungen, die auf dem Windows Subsystem f\u00fcr Linux (WSL) laufen.<\/li>\n<\/ul>\n<h2>Andere Node.js Debugging-Optionen<\/h2>\n<p>Der <a href=\"https:\/\/nodejs.org\/en\/docs\/guides\/debugging-getting-started\/\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js Debugging Guide<\/a> bietet Tipps f\u00fcr eine Reihe von Texteditoren und IDEs, darunter Visual Studio, JetBrains WebStorm, Gitpod und Eclipse. Atom bietet eine <a href=\"https:\/\/atom.io\/packages\/node-debug\" target=\"_blank\" rel=\"noopener noreferrer\">node-debug-Erweiterung<\/a>, die den Chrome DevTools Debugger in den Editor integriert.<\/p>\n<p>Sobald deine Anwendung in Betrieb ist, kannst du auch kommerzielle Debugging-Dienste wie <a href=\"https:\/\/logrocket.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">LogRocket<\/a> und <a href=\"https:\/\/sentry.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sentry.io<\/a> nutzen, die Client- und Serverfehler von echten Nutzern aufzeichnen und wiedergeben k\u00f6nnen.<\/p>\n\n<h2>Zusammenfassung<\/h2>\n<p>In der Vergangenheit war das <a href=\"https:\/\/kinsta.com\/de\/blog\/fehlern-in-javascript\/\">Debuggen von JavaScript<\/a> schwierig, aber in den letzten zehn Jahren hat es gro\u00dfe Verbesserungen gegeben. Die Auswahl ist genauso gut &#8211; wenn nicht sogar <i>besser<\/i> &#8211; als bei anderen Sprachen.<\/p>\n<p>Verwende jedes praktische Tool, um ein Problem zu lokalisieren. Gegen console.log() f\u00fcr die schnelle Fehlersuche ist nichts einzuwenden, aber f\u00fcr komplexere Probleme sind Chrome DevTools oder VS Code vielleicht besser geeignet. Diese Werkzeuge k\u00f6nnen dir helfen, stabileren Code zu erstellen, und du verbringst weniger Zeit mit der Fehlersuche.<\/p>\n<p><em>Auf welche Debugging-Methode f\u00fcr Node.js schw\u00f6rst du? Teile es uns in den Kommentaren unten mit!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node.js ist eine JavaScript-Laufzeitumgebung, die auf der gleichen V8-Engine basiert, die auch im Chrome-Browser von Google verwendet wird. Sie wird h\u00e4ufig f\u00fcr die Entwicklung von plattform\u00fcbergreifenden &#8230;<\/p>\n","protected":false},"author":188,"featured_media":48767,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[371,28],"topic":[951,965],"class_list":["post-48766","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-debugging","tag-webdev","topic-javascript-frameworks","topic-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Wie man Node.js-Code mit mehreren Tools debuggt<\/title>\n<meta name=\"description\" content=\"In diesem Lernprogramm werden verschiedene Tools vorgestellt, mit denen du Node-Anwendungen debuggen und ihre Ursachen finden kannst. Steig ein und erlerne alles von Grund auf.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/node-debug\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wie man Node.js-Code mit mehreren Tools debuggt\" \/>\n<meta property=\"og:description\" content=\"In diesem Lernprogramm werden verschiedene Tools vorgestellt, mit denen du Node-Anwendungen debuggen und ihre Ursachen finden kannst. Steig ein und erlerne alles von Grund auf.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/node-debug\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-17T08:57:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-18T09:22:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Craig Buckler\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"In diesem Lernprogramm werden verschiedene Tools vorgestellt, mit denen du Node-Anwendungen debuggen und ihre Ursachen finden kannst. Steig ein und erlerne alles von Grund auf.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@craigbuckler\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Craig Buckler\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/\"},\"author\":{\"name\":\"Craig Buckler\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/715d986404b06691ab3014e06596908e\"},\"headline\":\"Wie man Node.js-Code mit mehreren Tools debuggt\",\"datePublished\":\"2022-03-17T08:57:42+00:00\",\"dateModified\":\"2023-08-18T09:22:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/\"},\"wordCount\":3109,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg\",\"keywords\":[\"debugging\",\"webdev\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/node-debug\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/\",\"name\":\"Wie man Node.js-Code mit mehreren Tools debuggt\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg\",\"datePublished\":\"2022-03-17T08:57:42+00:00\",\"dateModified\":\"2023-08-18T09:22:48+00:00\",\"description\":\"In diesem Lernprogramm werden verschiedene Tools vorgestellt, mit denen du Node-Anwendungen debuggen und ihre Ursachen finden kannst. Steig ein und erlerne alles von Grund auf.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/node-debug\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg\",\"width\":1460,\"height\":730,\"caption\":\"Wie man Node.js-Code mit mehreren Tools debuggt\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/node-debug\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/node-js\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Wie man Node.js-Code mit mehreren Tools debuggt\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/715d986404b06691ab3014e06596908e\",\"name\":\"Craig Buckler\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"caption\":\"Craig Buckler\"},\"description\":\"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.\",\"sameAs\":[\"https:\/\/craigbuckler.com\/\",\"https:\/\/www.linkedin.com\/in\/craigbuckler\",\"https:\/\/x.com\/craigbuckler\",\"https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/craigbuckler\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Wie man Node.js-Code mit mehreren Tools debuggt","description":"In diesem Lernprogramm werden verschiedene Tools vorgestellt, mit denen du Node-Anwendungen debuggen und ihre Ursachen finden kannst. Steig ein und erlerne alles von Grund auf.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/node-debug\/","og_locale":"de_DE","og_type":"article","og_title":"Wie man Node.js-Code mit mehreren Tools debuggt","og_description":"In diesem Lernprogramm werden verschiedene Tools vorgestellt, mit denen du Node-Anwendungen debuggen und ihre Ursachen finden kannst. Steig ein und erlerne alles von Grund auf.","og_url":"https:\/\/kinsta.com\/de\/blog\/node-debug\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2022-03-17T08:57:42+00:00","article_modified_time":"2023-08-18T09:22:48+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg","type":"image\/jpeg"}],"author":"Craig Buckler","twitter_card":"summary_large_image","twitter_description":"In diesem Lernprogramm werden verschiedene Tools vorgestellt, mit denen du Node-Anwendungen debuggen und ihre Ursachen finden kannst. Steig ein und erlerne alles von Grund auf.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg","twitter_creator":"@craigbuckler","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Craig Buckler","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/"},"author":{"name":"Craig Buckler","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/715d986404b06691ab3014e06596908e"},"headline":"Wie man Node.js-Code mit mehreren Tools debuggt","datePublished":"2022-03-17T08:57:42+00:00","dateModified":"2023-08-18T09:22:48+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/"},"wordCount":3109,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg","keywords":["debugging","webdev"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/node-debug\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/","url":"https:\/\/kinsta.com\/de\/blog\/node-debug\/","name":"Wie man Node.js-Code mit mehreren Tools debuggt","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg","datePublished":"2022-03-17T08:57:42+00:00","dateModified":"2023-08-18T09:22:48+00:00","description":"In diesem Lernprogramm werden verschiedene Tools vorgestellt, mit denen du Node-Anwendungen debuggen und ihre Ursachen finden kannst. Steig ein und erlerne alles von Grund auf.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/node-debug\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/03\/node-debug.jpg","width":1460,"height":730,"caption":"Wie man Node.js-Code mit mehreren Tools debuggt"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/node-debug\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Node.js","item":"https:\/\/kinsta.com\/de\/thema\/node-js\/"},{"@type":"ListItem","position":3,"name":"Wie man Node.js-Code mit mehreren Tools debuggt"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/715d986404b06691ab3014e06596908e","name":"Craig Buckler","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","caption":"Craig Buckler"},"description":"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.","sameAs":["https:\/\/craigbuckler.com\/","https:\/\/www.linkedin.com\/in\/craigbuckler","https:\/\/x.com\/craigbuckler","https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/craigbuckler\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/48766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=48766"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/48766\/revisions"}],"predecessor-version":[{"id":53792,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/48766\/revisions\/53792"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/48766\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/48766\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/48766\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/48766\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/48766\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/48766\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/48766\/translations\/nl"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/48766\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/48767"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=48766"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=48766"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=48766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}