为什么我的后端为req.body返回未定义?

时间:2020-09-30 06:26:15

标签: node.js reactjs express

我的堆栈:React前端,SQL数据库,Express中间件。 我具有在此处传递给后端的状态下的用户注册值:

handleSubmit = event => {
      event.preventDefault();
  
      const user = {
        name: this.state.name,
        email: this.state.email,
        password: this.state.password
      };
  
      axios.post(`${REACT_APP_SERVER_URL}/api/users/register`, { user })
        .then(res => {
          console.log(res);
          console.log(res.data);
        })
}

我的服务器在这里响应:

router.post('/register', function(req, res) {
    console.log(req.body)
    db.User.findOne({
        email: req.body.user.email
    }).then(user => {
        if(user) {
            return res.status(400).json({
                email: 'Email already exists'
            });
        }
        else {
            const newUser = new User({
                name: req.body.user.name,
                email: req.body.user.email,
                password: req.body.user.password
            });
            
            bcrypt.genSalt(10, (err, salt) => {
                if(err) console.error('There was an error', err);
                else {
                    bcrypt.hash(user.password, salt, (err, hash) => {
                        if(err) console.error('There was an error', err);
                        else {
                            user.password = hash;
                            user
                                .create()
                                .then(user => {
                                    res.json(user)
                                }); 
                        }
                    });
                }
            });
        }
    });
});

我已经记录了正在传递的用户,并且在前端读取了值,但是后端返回了一个空对象。我知道我很初级,但是我在做什么错了?

2 个答案:

答案 0 :(得分:0)

您正在使用const newUser创建对象,如果要创建新用途,您必须这样做

       const newUser = new User({
            name: req.body.name,
            email: req.body.email,
            password: req.body.password
        });

     console.log(newUser)

console.log(newUser)将显示您创建的用户数据

答案 1 :(得分:-1)

我最终改变了很多代码。但是我认为问题在于,我必须使用“ body-parser”将JSON值传递给SQL。因此,如果您遇到类似的问题,请阅读有关body-parser的信息。

var bodyParser = require('body-parser');

app.use(bodyParser.json({ limit: '50mb' })); 
app.use(bodyParser.urlencoded({
     limit: '50mb',
     extended: true,
     parameterLimit: 50000
}));