反应和节点API-获取功能错误

时间:2018-08-10 15:47:12

标签: node.js reactjs

我只是React和NodeJS Express编程的新手,而我却陷入了数小时的错误。 当我尝试获取时,有时会收到响应(但不是我的响应) 有时我“无法提取”。

我试图在没有太多理解的情况下理解“ cors”概念, 但是我已经提交了app.use(cors()),它允许每个来源。

请注意,我的服务器有时会收到“ OPTIONS”请求,有时会收到“ POST”请求。

在我的React中,我具有以下功能:

fetch('http://localhost:3000/api/login', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',   
        },
        body: JSON.stringify ({
          user: this.state.username,
          pass: this.state.password,
        })
      }).then(res => {
          console.log(res.msg);
      })
      .catch(function(err) {
        alert(err);
      })
}

在我的NodeJS中,我具有以下功能:

router.post('/', (req, res) => {
let user = {
    username: req.body.user,
    password: req.body.pass 
}
UserModel.findOne({'username': user.username, 'password' : user.password}, function(err, user) {
    if (err) {
        res.json({
            ok: false,
            msg: 'login failed, try later'
        });
    } else if (user) {
        let token = jwt.encode(user, secret);
        res.json({
            msg: 'logged in',
            ok: true
        });
    } else {
        res.json({
            ok: false,
            msg: 'invalid input'
        });
    }
});

我很困惑,希望您能帮助我。 谢谢。

1 个答案:

答案 0 :(得分:0)

您没有正确访问响应的JSON。您需要调用响应的Body#json方法才能实际访问JSON内容。还请注意,它返回的承诺将解析为响应的JSON内容:

fetch('…', { … })
  .then(res => res.json())
  .then(json => {
    console.log(json.msg);
  });

此外,我建议将HTTP状态代码与JSON一起发送,而不要使用ok属性。这是一种标准方式,并通过Response对象提供了内置支持:

res.status(200).json({ … });