无法解析安装了body-parser的POST req

时间:2019-05-09 15:16:58

标签: node.js express

我正在开发一个小型服务器应用程序,以允许客户端创建用户。我无法解析req.body。我试图在Internet上到处阅读,但没有适合我的解决方案。

我的projet根目录上有2个文件。 -用于api配置的server.js,以及 -用于应用程序配置的app.js

// app.js
const express = require('express');
const bodyParser = require('body-parser');
const router = require('./routes/index.routes');

const app = express();

// Parse incoming requests data
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(router);

我的路线在routes / index.routes.js中

const express = require('express');
const QuickCreditCtrl = require('../controller/controller');

const router = express.Router();

const baseUrl = '/api/v1';

router.post(`${baseUrl}/auth/signup`, QuickCreditCtrl.createUser);
//router.post(`${baseUrl}/auth/signin`, QuickCreditCtrl.loginUser);

module.exports = router;

以及controller / controller.js上的控制器

const user = require('../data/users');

class QuickCreditsCtrl {
    createUser(req, res) {
        console.log(JSON.stringify(req.body));
        if (!req.body.name) {
            return res.status(404).send({
                status: '404',
                message: 'name is required',
            });
        } else if(!req.body.email) {
            return res.status(404).send({
                status: 404,
                message: 'email is required'
            });
        }
        const userNew = {
        id: user.length + 1,
        email: req.body.email,
        name: req.body.name,
        password: 'user123',
        };
        user.push(userNew);
        return res.status(200).send({
            status: 200,
            //message: 'New user added successfully',
            userNew,
            //data: userNew
        });
    }

}

const QuickCreditCtrl = new QuickCreditsCtrl();

//export default QuickCreditCtrl;
module.exports = QuickCreditCtrl;

当我使用Postman或curl时,除了我无法访问req.body之外,其他都可以。我不知道为什么要使用body-parser。

我的代码有问题吗?

编辑

我正在尝试简化事情,但仍然无法访问req.body。我读了太多书,但是找不到解决我问题的方法。在下面的文件中,我尝试执行app.js文件中的所有操作,但徒劳无功:

const express = require('express');
const bodyParser = require('body-parser');
const db = require('./data/users')

const app = express();

// Parse incoming requests data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/api/v1/auth/signup', (req, res) => {
  const data = {
        id: db.length + 1,
        email: req.body.email,
        firstN: req.body.firstN,
        lastN: req.body.lastN,
        password: 'Patie123',
      };
      db.push(data);
      return res.status(200).send({
        status: 200,
        message: 'User created successfully',
        data,
      });
      console.log(data);
});

module.exports = app;

我的代码到底有什么问题?或如何访问req.body?

2 个答案:

答案 0 :(得分:0)

一切似乎正确。 最可能的原因是该请求没有JSON正文。

此中间件

app.use(bodyParser.json());

如果找到标题“ Content-Type”:“ application / json”,则可以使用。

可以分享一个请求示例吗?

答案 1 :(得分:0)

尝试将urlencode设置为“ false”:

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

让我们知道是否可以解决该问题!

编辑:

然后,我尝试进行更深入的了解,我注意到以下代码行:

> router.post(`${baseUrl}/auth/signup`, QuickCreditCtrl.createUser);
> //router.post(`${baseUrl}/auth/signin`, QuickCreditCtrl.loginUser);

此处没有回调,您应将reqres作为参数传递:

 > router.post(`${baseUrl}/auth/signup`, QuickCreditCtrl.createUser, (req, res) => {
    //HERE YOU HAVE ACCESS TO req.body
}))

来源:https://expressjs.com/en/guide/routing.html