【问题标题】:Why is my backend returning undefined for req.body?为什么我的后端返回未定义的 req.body?
【发布时间】:2020-10-04 01:09:07
【问题描述】:

我的堆栈: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)
                                }); 
                        }
                    });
                }
            });
        }
    });
});

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

【问题讨论】:

    标签: node.js reactjs express


    【解决方案1】:

    你在创建对象时使用const newUser,如果你想创建新用途,你必须这样做

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

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

    【讨论】:

    • 因为我从前端传入用户,所以我需要它是 req.body.user.name 等。但不管我的 req.body 返回为空。
    【解决方案2】:

    我最终更改了很多代码。但我认为这个问题是我必须使用“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
    }));
    

    【讨论】:

    • 您究竟做了什么来解决您的问题?你的回答有点含糊。
    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2014-06-04
    • 2017-07-23
    • 2010-09-16
    • 1970-01-01
    相关资源
    最近更新 更多