Mi directorio de proyectos se ve así:
MyProject
-app.js
-routes
-routeone
-routetwo
Dentro de mi archivo app.js se ve así:
var express = require('express');
var app = express();
var routeone = require('./routes/routeone');
var routetwo = require('./routes/routetwo');
app.use('/routeone', routeone);
app.use('/routetwo', routetwo);
.
.
.
Cada archivo de ruta se ve así:
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({
extended: false
});
router.post('/', urlencodedParser, function(req, res, next) {
if (!req.body.param) {
//no parameter was provided
} else {
//there was a parameter provided
}
});
Module.exports = enrutador;
Como puede ver, tengo una dependencia en el módulo bodyparser. Necesito llamar a este módulo en cada ruta y especificar las opciones para esto. Puede que tenga muchas más rutas en el futuro. Me gustaría evitar especificar esto en cada archivo de ruta porque, por ejemplo, necesito cambiar el extended:true
en el futuro, tendré que ir a cada archivo y cambiarlo. Preferiría tener esto en un solo lugar. Intenté agregar esto al archivo app.js, pero luego urlencodedParser no se puede encontrar dentro de los archivos de ruta. También supongo que esto tiene un impacto en el rendimiento ya que cada ruta necesita cargar este módulo.
2 respuestas
Algunas opciones:
1) Coloque el middleware body-parser en el objeto app
en un solo lugar en lugar de en cada ruta individual.
2) Cree un nuevo módulo que extraiga el código común y cree un enrutador para usted con el middleware del enrutador ya instalado:
var router = express.Router();
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({
extended: false
});
router.use(urlencodedParser);
module.exports = router;
Y luego use ese nuevo módulo para crear cada uno de sus enrutadores. Si necesita cambiar extended: false
, puede cambiarlo en un solo lugar.
3) Cree un nuevo módulo que solo le proporcione una función de middleware común urlencodedParser
que puede usar en cada uno de sus enrutadores:
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({
extended: false
});
module.exports = urlencodedParser;
Y, luego, solicítelo en cada módulo y use el analizador importado en cada enrutador.
Solo tengo que variables: var urlencodedParserF = bodyParser.urlencoded ({ extendido: falso });
var urlencodedParserT = bodyParser.urlencoded ({ extendido: verdadero });
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.