node.js - proyecto - Diferencia entre app.all(''*'') y app.use(''/'')
node js install express windows (5)
¿Hay alguna diferencia útil entre app.all(''*'', ... )
y app.use(''/'', ...)
en Node.JS Express?
Con app.use()
, la ruta de "montaje" se elimina y no es visible para la función de middleware:
app.use(''/static'', express.static(__dirname + ''/public''));
Las funciones de middleware express.static
( express.static
) no se invocan a menos que req.url
contenga este prefijo ( /static
), en cuyo punto se elimina cuando se invoca la función.
Con app.all()
, no hay ese comportamiento.
En la mayoría de los casos, trabajarían de manera equivalente. La mayor diferencia es el orden en que se aplicará el middleware:
app.all()
conecta al enrutador de la aplicación, por lo que se usa siempre que se llega al middleware de la aplicación.router (que maneja todas las rutas del método ... GET, POST, etc.).app.use()
conecta a la pila de middleware principal de la aplicación, por lo que se usa en el orden especificado por middleware. por ejemplo, si lo pones primero, será lo primero que se ejecute. Si lo pones en último lugar (después del enrutador), por lo general no se ejecutará en absoluto.
Por lo general, si desea hacer algo globalmente en todas las rutas, app.use () es la mejor opción. Además, tiene menos posibilidades de errores futuros, ya que Express 0.4 probablemente soltará el enrutador implícito (es decir, la posición del enrutador en middleware será más importante de lo que es ahora, ya que técnicamente ni siquiera tiene que usarlo). ahora mismo).
Sí, se llama a app.all()
cuando se solicita un URI particular con cualquier tipo de método de solicitud (POST, GET, PUT o DELETE)
Por otro lado, app.use()
se utiliza para cualquier middleware que pueda tener y se monta en un prefijo de ruta, y se llamará en cualquier momento que se solicite un URI bajo esa ruta.
app.use solo tiene una función de devolución de llamada y está destinado a Middleware. Middleware por lo general no maneja la solicitud y la respuesta, (técnicamente pueden) solo procesan los datos de entrada, y los entregan al siguiente controlador en la cola.
app.use([path], function)
app.all toma múltiples devoluciones de llamada, y está destinado para el enrutamiento. con múltiples devoluciones de llamada puede filtrar las solicitudes y enviar respuestas. Se explica en Filtros en express.js
app.all(path, [callback...], callback)
app.use solo ve si url comienza con la ruta especificada
app.use( "/product" , mymiddleware);
// will match /product
// will match /product/cool
// will match /product/foo
app.all coincidirá con la ruta completa
app.all( "/product" , handler);
// will match /product
// won''t match /product/cool <-- important
// won''t match /product/foo <-- important
app.all( "/product/*" , handler);
// won''t match /product <-- Important
// will match /product/
// will match /product/cool
// will match /product/foo
app.use:
- inyecte middlware a su controlador frontal configurando por ejemplo: encabezado, cookies, sesiones, etc.
- debe escribirse antes de la aplicación [http_method] de lo contrario no se ejecutará.
- varias llamadas se procesan en el orden de escritura
espantar:
- (como la aplicación [http_method]) se usa para configurar controladores de rutas
- "todo" significa que se aplica en todos los métodos http.
- varias llamadas se procesan en el orden de escritura
Mira este ejemplo de código expressJs:
var express = require(''express'');
var app = express();
app.use(function frontControllerMiddlewareExecuted(req, res, next){
console.log(''(1) this frontControllerMiddlewareExecuted is executed'');
next();
});
app.all(''*'', function(req, res, next){
console.log(''(2) route middleware for all method and path pattern "*", executed first and can do stuff before going next'');
next();
});
app.all(''/hello'', function(req, res, next){
console.log(''(3) route middleware for all method and path pattern "/hello", executed second and can do stuff before going next'');
next();
});
app.use(function frontControllerMiddlewareNotExecuted(req, res, next){
console.log(''(4) this frontControllerMiddlewareNotExecuted is not executed'');
next();
});
app.get(''/hello'', function(req, res){
console.log(''(5) route middleware for method GET and path patter "/hello", executed last and I do my stuff sending response'');
res.send(''Hello World'');
});
app.listen(80);
Aquí está el registro al acceder a la ruta ''/ hello'':
(1) this frontControllerMiddlewareExecuted is executed
(2) route middleware for all method and path pattern "*", executed first and can do stuff before going next
(3) route middleware for all method and path pattern "/hello", executed second and can do stuff before going next
(5) route middleware for method GET and path patter "/hello", executed last and I do my stuff sending response