tutorial proyecto node how framework crear node.js express

node.js - proyecto - Diferencia entre app.use y app.get en express.js



node js install express windows (4)

Simplemente app.use significa "Ejecutar esto en TODAS las solicitudes"
app.get significa "Ejecutar esto en una solicitud GET, para la URL dada"

Soy algo nuevo para expresar y node.js, y no puedo entender la diferencia entre app.use y app.get. Parece que puedes usar ambos para enviar información. Por ejemplo:

app.use(''/'',function(req, res,next) { res.send(''Hello''); next(); });

parece ser el mismo que este:

app.get(''/'', function (req,res) { res.send(''Hello''); });


se llama a app.get cuando el método HTTP se establece en GET , mientras que se llama a app.use independientemente del método HTTP y, por lo tanto, define una capa que se encuentra encima de todos los otros tipos RESTful a los que los paquetes express le dan acceso.


app.use() está destinado a enlazar middleware a su aplicación. La path es una path " montaje " o " prefijo " y limita el middleware para que solo se aplique a cualquier ruta solicitada que comience con ella. Incluso se puede usar para incrustar otra aplicación:

// subapp.js var express = require(''express''); var app = modules.exports = express(); // ...

// server.js var express = require(''express''); var app = express(); app.use(''/subapp'', require(''./subapp'')); // ...

Al especificar / como una ruta de " montaje ", app.use() responderá a cualquier ruta que comience con / , que son todas ellas y sin importar el verbo HTTP utilizado:

  • GET /
  • PUT /foo
  • POST /foo/bar
  • etc.

app.get() , por otro lado, es parte del enrutamiento de la aplicación Express y está destinado a emparejar y manejar una ruta específica cuando se solicita con el verbo GET HTTP:

  • GET /

Y, el enrutamiento equivalente para su ejemplo de app.use() sería en realidad:

app.all(/^//.*/, function (req, res) { res.send(''Hello''); });

( Actualización: intentando demostrar mejor las diferencias ) .

Los métodos de enrutamiento, incluido app.get() , son métodos de conveniencia que lo ayudan a alinear las respuestas a las solicitudes con mayor precisión. También agregan soporte para características como parameters y next(''route'') .

Dentro de cada app.get() hay una llamada a app.use() , por lo que puedes hacer todo esto con app.use() directamente. Pero, hacerlo requerirá a menudo (probablemente innecesariamente) reimplementar varias cantidades de código repetitivo.

Ejemplos:

  • Para rutas simples y estáticas:

    app.get(''/'', function (req, res) { // ... });

    vs.

    app.use(''/'', function (req, res, next) { if (req.method !== ''GET'' || req.url !== ''/'') return next(); // ... });

  • Con múltiples controladores para la misma ruta:

    app.get(''/'', authorize(''ADMIN''), function (req, res) { // ... });

    vs.

    const authorizeAdmin = authorize(''ADMIN''); app.use(''/'', function (req, res, next) { if (req.method !== ''GET'' || req.url !== ''/'') return next(); authorizeAdmin(req, res, function (err) { if (err) return next(err); // ... }); });

  • Con parámetros:

    app.get(''/item/:id'', function (req, res) { let id = req.params.id; // ... });

    vs.

    const pathToRegExp = require(''path-to-regexp''); function prepareParams(matches, pathKeys, previousParams) { var params = previousParams || {}; // TODO: support repeating keys... matches.slice(1).forEach(function (segment, index) { let { name } = pathKeys[index]; params[name] = segment; }); return params; } const itemIdKeys = []; const itemIdPattern = pathToRegExp(''/item/:id'', itemIdKeys); app.use(''/'', function (req, res, next) { if (req.method !== ''GET'') return next(); var urlMatch = itemIdPattern.exec(req.url); if (!urlMatch) return next(); if (itemIdKeys && itemIdKeys.length) req.params = prepareParams(urlMatch, itemIdKeys, req.params); let id = req.params.id; // ... });

Nota: La implementación Express de estas características se encuentra en su Router , Layer y Route .


app.use es el método de "nivel inferior" de Connect, el marco de middleware del que depende Express.

Aquí está mi guía:

  • Use app.get si quiere exponer un método GET.
  • Use app.use si desea agregar algún middleware (un controlador para la solicitud HTTP antes de que llegue a las rutas que configuró en Express), o si desea hacer que sus rutas sean modulares (por ejemplo, exponer un conjunto de rutas de un módulo npm que otras aplicaciones web podrían usar).