Traducir esta página

Depuración 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:*.

Terminal window
$ DEBUG=express:*,router,router:* node index.js

En Windows, utilice el comando correspondiente.

Terminal window
> $env:DEBUG = "express:*,router,router:*"; node index.js

Running this command on a small app with a JSON body parser and a mounted router prints the following output:

index.cjs
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);
Terminal window
$ 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 '/' +1ms

Cuando se hace una solicitud a la aplicación, verá los registros especificados en el código Express:

Terminal window
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 / +0ms

To see the logs only from the router implementation, set the value of DEBUG to router,router:*. De la misma manera, para ver los registros sólo desde la implementación de la aplicación, establece el valor de DEBUG a express:application, y así sucesivamente.

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:

Terminal window
npm install debug
index.cjs
const 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');
});

These statements print nothing by default. Enable them through the same DEBUG environment variable, using your own namespace:

Terminal window
$ DEBUG=myapp:* node index.js

Puede especificar más de un espacio de nombres de depuración asignando una lista de nombres separados por comas:

Terminal window
$ DEBUG=myapp:*,router node index.js

Setting 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:

.vscode/launch.json
{
"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:

Terminal window
$ node --inspect index.js

Then 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:

Terminal window
$ NODE_DEBUG=http node index.js

You 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:

index.cjs
const { subscribe } = require('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.

Opciones avanzadas

Cuando se ejecuta a través de Node.js, puede establecer algunas variables de entorno que cambiarán el comportamiento del registro de depuración:

NombrePropósito
DEBUGHabilita o deshabilita espacios de nombres específicos de depuración.
DEBUG_COLORSUsar o no colores en la salida de depuración.
DEBUG_DEPTHProfundidad de inspección de objetos.
DEBUG_FDDescriptor de archivo en el que escribir salida de depuración.
DEBUG_SHOW_HIDDENMuestra propiedades ocultas en los objetos esperados.

Note

Las variables de entorno que empiezan con DEBUG_ acaban siendo convertidas en un objeto Options que se usa con formateadores %o/%O. Vea la documentación de Node.js para [util.inspect()`](https://nodejs.org/api/util.html#utilinspectobject-options) para la lista completa .