Débogage Express
To see all the internal logs used in Express, set the DEBUG environment variable to express:*,router,router:* when launching your app. Routing is handled by the separate router package, so its logs live under the router namespace and are not included in express:*.
$ DEBUG=express:*,router,router:* node index.jsSous Windows, utilisez la commande correspondante.
> $env:DEBUG = "express:*,router,router:*"; node index.jsRunning this command on a small app with a JSON body parser and a mounted router prints the following output:
const express = require('express');
const app = express();
app.use(express.json());
const users = express.Router();users.get('/', (req, res) => { res.json([]);});
app.use('/users', users);
app.get('/', (req, res) => { res.send('Hello World!');});
app.listen(3000);import express from 'express';
const app = express();
app.use(express.json());
const users = express.Router();users.get('/', (req, res) => { res.json([]);});
app.use('/users', users);
app.get('/', (req, res) => { res.send('Hello World!');});
app.listen(3000);$ DEBUG=express:*,router,router:* node index.js express:application set "x-powered-by" to true +0ms express:application set "etag" to 'weak' +3ms express:application set "etag fn" to [Function: generateETag] +0ms express:application set "env" to 'development' +1ms express:application set "query parser" to 'simple' +0ms express:application set "query parser fn" to [Function: parse] +0ms express:application set "subdomain offset" to 2 +1ms express:application set "trust proxy" to false +0ms express:application set "trust proxy fn" to [Function: trustNone] +1ms express:application booting in development mode +0ms express:application set "view" to [Function: View] +0ms express:application set "views" to '/projects/example/views' +1ms express:application set "jsonp callback name" to 'callback' +0ms router use '/' jsonParser +0ms router:layer new '/' +0ms router:route new '/' +0ms router:layer new '/' +3ms router:route get / +0ms router:layer new '/' +1ms router use '/users' router +4ms router:layer new '/users' +0ms router:route new '/' +1ms router:layer new '/' +0ms router:route get / +1ms router:layer new '/' +1msLorsqu’une demande est faite à l’application, vous verrez les journaux spécifiés dans le code Express:
router dispatching GET /users +712ms router jsonParser : /users +1ms router trim prefix (/users) from url /users +2ms router router /users : /users +0ms router dispatching GET / +0msTo see the logs only from the router implementation, set the value of DEBUG to router,router:*. De même, pour ne voir que les logs de l’implémentation de l’application, définissez la valeur de DEBUG à express:application, et ainsi de suite.
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.jsVous pouvez spécifier plus d’un espace de noms de débogage en assignant une liste de noms séparés par des virgules :
$ DEBUG=myapp:*,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:*,router,router:*" }}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.
Options avancées
Lors de l’exécution de Node.js, vous pouvez définir quelques variables d’environnement qui changeront le comportement du journal de débogage :
| Nom | Objectif |
|---|---|
DEBUG | Active/désactive les espaces de noms de débogage spécifiques. |
DEBUG_COLORS | Utiliser ou non les couleurs dans la sortie de débogage. |
DEBUG_DEPTH | Profondeur de l’inspection des objets. |
DEBUG_FD | Descripteur de fichier vers lequel écrire la sortie de débogage. |
DEBUG_SHOW_HIDDEN | Affiche les propriétés masquées sur les objets inspectés. |
Les variables d’environnement commençant par DEBUG_ finissent par être converties en un objet d’options
qui est utilisé avec les formats %o/%O. Voir la documentation Node.js pour
util.inspect() pour la liste complète
.