Debuggen Express
Um alle internen Logs zu sehen, die in Express verwendet werden, setzen Sie die Umgebungsvariable DEBUG auf
express:* beim Starten Ihrer App.
$ DEBUG=express:* node index.jsVerwenden Sie unter Windows den entsprechenden Befehl.
> $env:DEBUG = "express:*"; node index.jsDas Ausführen dieses Befehls auf der vom [Express-Generator] generierten Standard-App (/en/starter/generator) gibt folgende Ausgabe aus:
$ DEBUG=express:* node ./bin/www express:router:route new / +0ms express:router:layer new / +1ms express:router:route get / +1ms express:router:layer new / +0ms express:router:route new / +1ms express:router:layer new / +0ms express:router:route get / +0ms express:router:layer new / +0ms express:application compile etag weak +1ms express:application compile query parser extended +0ms express:application compile trust proxy false +0ms express:application booting in development mode +1ms express:router use / query +0ms express:router:layer new / +0ms express:router use / expressInit +0ms express:router:layer new / +0ms express:router use / favicon +1ms express:router:layer new / +0ms express:router use / logger +0ms express:router:layer new / +0ms express:router use / jsonParser +0ms express:router:layer new / +1ms express:router use / urlencodedParser +0ms express:router:layer new / +0ms express:router use / cookieParser +0ms express:router:layer new / +0ms express:router use / stylus +90ms express:router:layer new / +0ms express:router use / serveStatic +0ms express:router:layer new / +0ms express:router use / router +0ms express:router:layer new / +1ms express:router use /users router +0ms express:router:layer new /users +0ms express:router use / <anonymous> +0ms express:router:layer new / +0ms express:router use / <anonymous> +0ms express:router:layer new / +0ms express:router use / <anonymous> +0ms express:router:layer new / +0msWenn eine Anfrage an die App gestellt wird, sehen Sie die im Express-Code angegebenen Protokolle:
express:router dispatching GET / +4h express:router query : / +2ms express:router expressInit : / +0ms express:router favicon : / +0ms express:router logger : / +1ms express:router jsonParser : / +0ms express:router urlencodedParser : / +1ms express:router cookieParser : / +0ms express:router stylus : / +0ms express:router serveStatic : / +2ms express:router router : / +2ms express:router dispatching GET / +1ms express:view lookup "index.pug" +338ms express:view stat "/projects/example/views/index.pug" +0ms express:view render "/projects/example/views/index.pug" +1msUm die Protokolle nur von der Router-Implementierung zu sehen, setzen Sie den Wert DEBUG auf express:router. Um Protokolle nur von der Anwendungsimplementierung zu sehen, setzten Sie den Wert von DEBUG auf express:application, und so weiter.
Using debug in your own code
The same debug module that Express uses internally is available for your application code. Install it, create one or more loggers scoped to a namespace of your choosing, and call them wherever you would otherwise use console.log:
npm install debugyarn add debugpnpm add debugbun add debugconst express = require('express');const debug = require('debug')('myapp:server');
const app = express();
app.get('/', (req, res) => { debug('handling request from %s', req.ip); res.send('Hello World!');});
app.listen(3000, () => { debug('listening on port 3000');});import express from 'express';import debugModule from 'debug';
const debug = debugModule('myapp:server');const app = express();
app.get('/', (req, res) => { debug('handling request from %s', req.ip); res.send('Hello World!');});
app.listen(3000, () => { debug('listening on port 3000');});These statements print nothing by default. Enable them through the same DEBUG environment variable, using your own namespace:
$ DEBUG=myapp:* node index.jsSie können mehr als einen Debug-Namensraum angeben, indem Sie eine kommaseparierte Namensliste zuweisen:
$ DEBUG=myapp:*,express:router node index.jsSetting DEBUG in your IDE
The DEBUG environment variable can be set by any process launcher that supports environment variables, including the run and debug configurations of your IDE. For example, in VS Code you can set it in the env property of a launch configuration:
{ "type": "node", "request": "launch", "name": "Launch Express app", "program": "${workspaceFolder}/index.js", "env": { "DEBUG": "express:*" }}See Node.js debugging in VS Code for the full list of launch options.
Using the Node.js inspector
Debug logs show what the app did; for stepping through your code with breakpoints, use the built-in Node.js inspector. Start your app with the --inspect flag:
$ node --inspect index.jsThen attach a debugging client, such as Chrome DevTools (open chrome://inspect), VS Code, or any other inspector-capable tool, to set breakpoints in your route handlers and middleware, step through code, and inspect variables.
If you need to debug something that happens during startup, use --inspect-brk instead, which pauses execution on the first line until a debugger attaches. See the Node.js debugging guide for details.
Debugging the HTTP layer
Express runs on top of the Node.js http module, which has its own debugging facilities that work with any Express app.
Setting the NODE_DEBUG environment variable to http makes Node.js print internal logs from the HTTP layer, such as connection handling and socket events:
$ NODE_DEBUG=http node index.jsYou can combine it with other subsystems, such as net or stream, in a comma-separated list. Be aware that this output can expose sensitive data such as authentication headers, so use it only in development.
Diagnostics channels
Node.js publishes an event for every HTTP request through the diagnostics_channel module, which you can subscribe to without patching Express or adding middleware:
const { subscribe } = require('node:diagnostics_channel');
subscribe('http.server.request.start', ({ request }) => { console.log(`${request.method} ${request.url}`);});import { subscribe } from 'node:diagnostics_channel';
subscribe('http.server.request.start', ({ request }) => { console.log(`${request.method} ${request.url}`);});Other built-in channels cover the rest of the request lifecycle, such as http.server.response.finish, and the client side of http.request calls. See the diagnostics_channel documentation for the full list.
Erweiterte Optionen
Wenn Sie über Node.js laufen, können Sie ein paar Umgebungsvariablen festlegen, die das Verhalten der Debug-Protokollierung ändern:
| Name | Zweck |
|---|---|
DEBUG | Aktiviere/deaktiviert bestimmte Debugging-Namensräume. |
| DEBUG_COLORS | Gibt an, ob Farben in der Debug-Ausgabe verwendet werden sollen oder nicht. |
| DEBUG_DEPTH` | Objektüberprüfungstiefe. |
DEBUG_FD | Datei-Deskriptor, in den die Debug-Ausgabe geschrieben wird. |
DEBUG_SHOW_HIDDEN | Zeigt versteckte Eigenschaften auf untersuchten Objekten. |
Note
Die Umgebungsvariablen, die mit DEBUG_ beginnen, werden am Ende in ein Optionsobjekt
konvertiert, das mit %o/%O Formate verwendet wird. Siehe die Dokumentation von Node.js für
util.inspect() für die vollständige
Liste.