Tengo un archivo server.js, donde tengo un trainer route

Que se usa para crear algunas rutas en express, pero cada vez que ejecuto el programa, me da un typeError

firstName: req.body.firstName,                       ^

TypeError: Cannot read property 'body' of undefined

Aquí está todo mi archivo server.js. He configurado los bodyparsers correctos para express, pero todavía me da el mismo error

Server.js

const express = require('express');
const properties = require('./config/properties');
const db = require('./config/database');
const app = express();
const bodyParser = require('body-parser');
const log = require('morgan')('dev');
const cors = require('cors');


// call the database connectivity function
db();




//configure middleware
app.use(log);
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));


//parsers
const router = express.Router();

//routes
const trainerRoutes = require('./api/trainers/trainer.routes');



//configure routes
app.use('/api', router);

trainerRoutes(router);


app.listen(properties.PORT, (req, res)=>{
    console.log(`Server running on ${properties.PORT} port`)
});

¿Por qué ocurre este problema?

Editar:

Aquí está la función en la que ocurre el error, esto está en el archivo trainer.controller.js:

exports.updateTrainer = function(req, res, next) {
    const trainer = {
        firstName: req.body.firstName,
        lastName: req.body.lastName,
        biography: req.body.description,
        certificates: req.body.certificates
    };
    Trainer.update({_id: req.params.id}, trainer, function(err, trainer) {
        if(err) {
            res.json({
                error : err
                //should make a log message here
            })
        }
        res.json({
            message : "Trainer updated successfully"
        })
    })
};

Archivo trainer.routes.js

module.exports = function(router) {
    router.post('/create', Trainer.createTrainer);
    router.get('/get', Trainer.getAllTrainers);
    router.get('/get/:name', Trainer.getTrainer);
    router.put('/update/:id', Trainer.updateTrainer());
    router.delete('/remove/:id', Trainer.removeHero());
};
0
baileyhaldwin 22 oct. 2019 a las 11:16

1 respuesta

La mejor respuesta

Creo que esta linea

app.use('/api', router);

Debe ser

app.use('/api', trainerRoutes);

Y esta línea debe eliminarse:

trainerRoutes(router);

Y su trainer.routes.js debería ser así:

const express = require('express');
const router = express.Router();

router.post('/create', Trainer.createTrainer);
router.get('/get', Trainer.getAllTrainers);
router.get('/get/:name', Trainer.getTrainer);
router.put('/update/:id', Trainer.updateTrainer);
router.delete('/remove/:id', Trainer.removeHero);

module.exports = router;

2
SuleymanSah 22 oct. 2019 a las 08:40