what tutorial nodejs node engine node.js express

node.js - tutorial - server graphql



Diferencia entre app.use() y router.use() en Express (3)

Estaba leyendo la documentación en express y encontré estos dos términos, app.use(); y router.use();

app.use(); se usa en el nodo para montar un middleware en una ruta, y a menudo lo usamos en la mayoría de las aplicaciones de nodo. pero que es router.use(); son los dos iguales? si no, ¿cuál es la diferencia?

Leí sobre el enrutador here . También encontré preguntas similares sobre SO ¿Cuál es la diferencia entre "express.Router" y el enrutamiento usando "app.get"? y la diferencia entre app.all (''*'') y app.use (''/'') , pero en realidad no responden mi pregunta. Gracias.


app.use () utilizado para montar la función o funciones de middleware en la ruta especificada, la función de middleware se ejecuta cuando la base de la ruta solicitada coincide con la ruta.

router.use () se utiliza para la función o funciones de middleware. La ruta de montaje predeterminada es "/".

Pero en app.use () tendrá que dar una ruta específica como esa:

var adsRouter = require(''./adsRouter.js''); app.use(''/ads'', adsRouter);

o

app.use(''/ads'', function(req, res, next) { // write your callback code here. });

Pero mientras usa router.use () solo puede proporcionar middleware, como este:

router.use(function(req, res, next) { console.log(''%s %s %s'', req.method, req.url, req.path); next(); });

o

router.use(''/test'', function(req, res, next) { // write your callback code here. next(); });

o

//in router.js router.use(''/admin'', authUtil.verifySessionId, authUtil.verifyLisencee); router.post(''/admin'', controllerIndex.ads.adListingAdmin);

En el código anterior, cuando el punto final es ''/ admin'', primero llamará a authUtil.verifySessionId y authUtil.verifyLisencee, luego ejecutará la siguiente línea con el punto final ''admin'' y de acuerdo con el método controllerIndex.ads.adListingAdmin.


router.get es solo para definir subrutas. Considere este ejemplo:

var router = express.Router(); app.use(''/first'', router); // Mount the router as middleware at path /first router.get(''/sud'', smaller); router.get(''/user'', bigger);

  • Si abre / first / sud , se llamará a la función smaller .
  • Si abre / first / user , se llamará a la función bigger .

En resumen, app.use(''/first'', router) monta el middleware en la ruta / first , luego router.get establece la ruta router.get consecuencia.

Pero si en cambio usamos lo siguiente:

app.use(''/first'', fun); app.get(''/sud'', bigger); app.get(''/user'', smaller);

  • Si abre / primero en su navegador, se llamará fun ,
  • Para / sud , bigger se llamará
  • Para / user , se llamará a small

Pero recuerde para / first / sud , no se llamará a ninguna función.

Este enlace también puede ayudar: here


router.use(); monta el middleware para las rutas servidas por el enrutador específico, app.use(); monta el middleware para todas las rutas de la aplicación (o las que coinciden con las rutas especificadas si usa app.use(''/ANYROUTESHERE'', yourMiddleware()); ).

Un caso de uso de ejemplo podría ser una aplicación con un enrutador con rutas estándar y un enrutador que maneja rutas api, que necesitan un usuario válido.

Luego montaría el middleware de autenticación para el enrutador api solo con router.use(yourAuthMiddleware()); .

Si desea tener una aplicación que requiere un usuario válido para todas las rutas, monte el middleware para la aplicación con app.use(yourAuthMiddleware());