如何解决请求主体在Controller Express中未定义
我在编写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.checkRole('siteOwner'),res) => {
return res.json(secretData);
})
server.get('*',jsonParser,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,portfolioCtrl.getPortfolio);
router.route('').post(authService.checkJWT,portfolioCtrl.savePortfolio);
router.route('/:id').patch(authService.checkJWT,portfolioCtrl.updatePortfolio);
router.route('/:id').delete(authService.checkJWT,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);
})
},
解决方法
Express route的回调函数按以下顺序获取参数:
(req,res,next) =>{...}
- req,请求对象。
- res,响应对象。
- 下一步,指示下一个中间件功能(可选)
savePortfolio: (res,req) => {...}
的顺序错误。这就是为什么req.body
将是undefined
。
更正:savePortfolio: (req,res) => {...}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。