首页 > 解决方案 > req.body 返回未定义 - nodejs

问题描述

当我把 app.use(bodyParser.json()); 下面app.use('/api', require('./routes/api')) req.body 返回未定义。但是如果我把 app.use(bodyParser.json()); 以上app.use('/api', require('./routes/api')); 它正确返回。那么问题是为什么?

这是我的代码:index.js 文件

const express = require('express');
const app = express();
const bodyParser= require('body-parser');

app.use(bodyParser.json());

app.use('/api', require('./routes/api'));

app.listen(process.env.port || 3000, function(){
    console.log('You are listening to port 3000'); 
}); 

api.js 文件


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

router.get('/ninjas', function(req, res){
    res.send({type: 'GET'});
});

router.post('/ninjas', function(req, res){
    console.log(req.body);
    res.send({type: 'POST'});
});

router.put('/ninjas/:id', function(req, res){
    res.send({type: 'PUT'});
});

router.delete('/ninjas/:id', function(req, res){
    res.send({type: 'DELETE'});
});

module.exports =router; 

提前致谢!

标签: node.jsexpress

解决方案


我们需要 body-parser 中间件从 req.body 中读取,

在 Javascript 代码中逐行执行(对于非 IO 操作)。

因此,当您在需要路由器文件逻辑之后放置 app.use(bodyParser.json()) 时,不会调用和插入 body-parser,因此您需要在任何其他逻辑之前调用它,以便您可以从请求中读取。


推荐阅读