Javascript bExpress bodyparser未正确配置

Javascript bExpress bodyparser未正确配置,javascript,node.js,express,Javascript,Node.js,Express,我有一个server.js文件,其中有一个培训师路线 它用于在express中创建一些路由,但每当我运行该程序时,它都会给我一个typeError firstName: req.body.firstName, ^ TypeError: Cannot read property 'body' of undefined 这是我的整个server.js文件。我已经为express配置了正确的BodyParser,但它仍然会给我相同的错误 Server.j

我有一个server.js文件,其中有一个
培训师路线

它用于在express中创建一些路由,但每当我运行该程序时,它都会给我一个typeError

firstName: req.body.firstName,                       ^

TypeError: Cannot read property 'body' of undefined
这是我的整个server.js文件。我已经为express配置了正确的BodyParser,但它仍然会给我相同的错误

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`)
});
为什么会出现这个问题

编辑:

以下是发生错误的函数,位于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"
        })
    })
};

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());
};
我想这条线

app.use('/api', router);
应该是

app.use('/api', trainerRoutes);
这一行需要删除:

trainerRoutes(router);
您的trainer.routes.js应该是这样的:

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;

我想这条线

app.use('/api', router);
应该是

app.use('/api', trainerRoutes);
这一行需要删除:

trainerRoutes(router);
您的trainer.routes.js应该是这样的:

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;



您能否提供发生错误的代码部分?错误意味着
req
未定义。您可以显示培训师路线代码吗?您可以将trainerRoutes代码添加到问题中吗?我已经编辑了代码错误表明express没有调用
updateTrainer()
,而是通过其他机制调用的,该机制没有正确地将请求对象作为第一个参数传递。您是否可以发布
trainer.routes.js
?您是否可以提供发生错误的代码部分?错误表示
req
未定义。您可以显示培训师路线代码吗?您可以将trainerRoutes代码添加到问题中吗?我已经编辑了代码错误表明express没有调用
updateTrainer()
,而是通过其他机制调用的,该机制没有正确地将请求对象作为第一个参数传递。你能发布
trainer.routes.js
吗?没有快速路由器吗?我正要提出这个建议,但这实际上取决于
trainerRoutes()
的确切功能。@baileyhaldwin我也更改了trainer.routes.js代码,你能尝试所有这些更改并说出结果吗?你错过了实际问题,@baileyhaldwin这个答案只是用另一种方式告诉express使用哪条路线。我还没有测试过它,但据我所知,如果你删除了原始代码中的两个有问题的
()
,一切都会正常工作。因此如果没有express router?我正要提出这个建议,但这实际上完全取决于
trainerRoutes()
的具体功能。@baileyhaldwin我还更改了trainer.routes.js代码,你能尝试一下所有这些改变并说出结果吗?你错过了真正的问题,@baileyhaldwin这个答案只是用一种不同的方式告诉express使用哪条路线。我还没有对它进行测试,但据我所知,如果您在原始代码中删除了两个有问题的
()
,那么一切都会正常工作。