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.

0
user2924127 19 mar. 2017 a las 01:59

2 respuestas

La mejor respuesta

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.

1
jfriend00 18 mar. 2017 a las 23:38

Solo tengo que variables: var urlencodedParserF = bodyParser.urlencoded ({ extendido: falso }); var urlencodedParserT = bodyParser.urlencoded ({ extendido: verdadero });

0
Johnsons Gaming 18 mar. 2017 a las 23:29