【问题标题】:Request body undefined in controller Express控制器 Express 中未定义的请求正文
【发布时间】:2020-12-02 08:05:54
【问题描述】:

我在编写 console.log(req); 时遇到了控制器问题我有请求正文的所有内容,但是当我写 console.log(req.body);未定义。我正在尝试使用 Next.js React 和 Express 编写我的作品集。

这是我的服务器 index.js:

const express = require('express');
const next = require('next');
const routes = require('../routes');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');


// SERVICE
const authService = require('./services/auth');

const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = routes.getRequestHandler(app);
const config = require('./config');

const portfolioRoutes = require('./routes/portfolio');

const secretData = [
{   id: '1',
    title: 'Secret Data',
    description: 'plans for build something !'
},
{   
    id: '2',
    title: 'Secret Data2',
    description: 'plans for build something2 !'
}
]


//MONGODB
mongoose.connect(config.DB_URI, {useNewUrlParser: true, useUnifiedTopology: true})
.then(() => {
console.log("Db connected");

}).catch(err => console.log(err));



app.prepare()
.then(() => {
const server = express();
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({ extended: false }));
var jsonParser = bodyParser.json()
server.use('/api/v1/portfolio', portfolioRoutes);

server.get('/api/v1/secret', authService.checkJWT, (req,res) => {
    return res.json(secretData);

})

server.get('/api/v1/ownersite', authService.checkJWT, authService.checkRole('siteOwner'),
    (req,res) => {
    return res.json(secretData);

})

server.get('*', jsonParser,(req,res) => {
    return handle(req,res);
})

server.use(function (err, req, res, next){
    if (err.name === 'UnauthorizedError') {
        res.status(401).send({title: `Invalid token...`});
    }
});

server.use(handle).listen(3000, (err) => {
    if(err) throw err
    console.log('> Ready on http://localhost:3000');
})

}).catch((ex) => {
console.error(ex.stack)
process.exit(1);
})

这是我的路线:

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

const portfolioCtrl = require('../controllers/portfolio');
const authService = require('../services/auth');

router.route('').get(authService.checkJWT, authService.checkRole('siteOwner'),       
portfolioCtrl.getPortfolio);
router.route('').post(authService.checkJWT, authService.checkRole('siteOwner'),     
portfolioCtrl.savePortfolio);
router.route('/:id').patch(authService.checkJWT, authService.checkRole('siteOwner'),     
portfolioCtrl.updatePortfolio);
router.route('/:id').delete(authService.checkJWT, authService.checkRole('siteOwner'),     
portfolioCtrl.deletePortfolio);

module.exports = router;

这是我的控制器:

savePortfolio: (res, req) => {
    console.log(req);
    const portfolioData = req.body;
    const portfolio = new Portfolio(portfolioData);
    portfolio.save((err, createdPortfolio) => {
        if(err) {
            return res.status(422).send(err);
        }
        return res.json(createdPortfolio);
    })
},

【问题讨论】:

    标签: javascript node.js mongodb express next.js


    【解决方案1】:

    Express路由的回调函数按以下顺序接受参数:

    (req, res, next) =>{...}

    • req,请求对象。
    • res,响应对象。
    • next,表示下一个中间件功能(可选)

    savePortfolio: (res, req) => {...} 的顺序错误。这就是为什么req.body 会是undefined

    更正:savePortfolio: (req, res) => {...}

    【讨论】:

    • 嘿,太好了,正在工作,非常感谢这个小东西,我输了 2 小时 ...
    猜你喜欢
    • 2020-04-13
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多