node.js - node - express router
Node.js expresa el uso correcto de bodyParser middleware (1)
Tu segundo método está bien. Recuerde que también puede pasar matrices de funciones de middleware a app.post
, app.get
y amigos. Entonces puede definir una matriz llamada uploadMiddleware
con sus cosas que manejan cuerpos POST, cargas, etc., y usar eso.
app.post(''/test1'', uploadMiddleware, routeHandler1);
Los ejemplos son para principiantes. El código de principiante para ayudarlo a hacer que la maldita cosa funcione el día 1 y el código de producción que es eficiente y seguro a menudo son muy diferentes. Usted hace un punto ciertamente válido acerca de no aceptar subidas a rutas arbitrarias. En cuanto a analizar todos los cuerpos de solicitud siendo ''muy ineficientes'', eso depende de la proporción de solicitudes POST inválidas / de ataque a solicitudes legítimas que se envían a su aplicación. La radiación de fondo promedio de las solicitudes de sonda de ataque probablemente no sea suficiente para preocuparse hasta que su sitio comience a ser popular.
Soy nuevo en node.js y express y he estado experimentando con ellos por un tiempo. Ahora estoy confundido con el diseño del marco expreso relacionado con el análisis del cuerpo de la solicitud. De la guía oficial de express:
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);
Después de configurar todo el middleware, agregamos la ruta que queremos manejar:
app.post(''/test'', function(req, res){
//do something with req.body
});
El problema con este enfoque es que todo el cuerpo de la solicitud se analizará primero antes de comprobar la validez de la ruta. Parece muy ineficiente analizar el cuerpo de solicitudes inválidas. Y aún más, si habilitamos el proceso de carga:
app.use(express.bodyParser({uploadDir: ''/temp_dir''}));
¡Cualquier cliente puede bombardear el servidor cargando cualquier archivo (enviando la solicitud a CUALQUIER ruta / ruta!), Todo lo cual será procesado y guardado en el ''/ temp_dir''. ¡No puedo creer que este método predeterminado esté siendo ampliamente promocionado!
Por supuesto, podemos usar la función bodyParser al definir la ruta:
app.post(''/test1'', bodyParser, routeHandler1);
app.post(''/test2'', bodyParser, routeHandler2);
o incluso tal vez analizar el cuerpo en cada función que maneja la ruta. Sin embargo, esto es tedioso de hacer.
¿Hay alguna forma mejor de usar express.bodyParser para todas las rutas válidas (definidas) solamente, y para usar la capacidad de manejo de carga de archivos solo en las rutas seleccionadas, sin tener que repetir muchas veces el código?