使用body-parser时req.body返回undefined

时间:2018-09-06 20:34:53

标签: javascript node.js express

我正在尝试构建一个接收POST请求以创建用户的API,但是我的所有req.body请求都收到未定义的错误。我的应用程序设置如下(为简便起见,已简化):

在我的用户路由文件中被Express Router调用的用户控制器

/controllers/user.js

userController.addUser = function(req, res) {
  let user = new User();

  user.username = req.body.username;
  user.first_name = req.body.first_name;
  user.last_name = req.body.last_name;
  user.email = req.body.email;
  user.type = req.body.user_type

  // This returns undefined as does all other req.body keys
  console.log("REQ.BODY.EMAIL IS: " + req.body.email);
} 

用户路由文件:

/routes/user.js-需要上面的用户控制器

router.post('/user/create', userController.addUser);

主应用: 除了使用req.body。*之外,所有路由和控制器均按我的测试工作

index.js-主应用程序文件

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

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

我仔细阅读了Express文档和无数StackOverflow帖子,但运气不佳。让我知道您是否需要进一步说明。

2 个答案:

答案 0 :(得分:-1)

我的问题是我如何将正文发送到API端点。我使用的是表单数据,而不是Postman的x-www-form-urlencoded。用户错误

答案 1 :(得分:-1)

有时body-parser版中的更改似乎不起作用,在这种情况下,只需使用以下命令,这将从body-parser中删除依赖项:

router.post('/user/create', (req, res, next) => {

    let body = [];

    req.on('error', (err) => {
      console.error(err);
    }).on('data', (chunk) => {
      // Data is present in chunks without body-parser
      body.push(chunk);
    }).on('end', () => {
      // Finally concat complete body and will get your input
      body = Buffer.concat(body).toString();
      console.log(body);

      // Set body in req so next function can use
      // body-parser is also doing something similar 
      req.body = body;

      next();
    });

}, userController.addUser);