使用react和Express.js来获取API响应不会通过console.log

时间:2019-03-24 17:21:54

标签: javascript node.js reactjs

我有一个登录表单,该表单使用fetch将数据发送到Express.js后端。在客户端上,当我想在提取调用完成时显示其结果时,将不显示任何内容(并且永远不会到达数据回调)。我似乎没有收到任何错误,但我知道数据已成功发送到后端。

这是Express.js服务器代码:

const express = require('express');

const User = express.Router();

const bcrypt = require('bcrypt');

const user = require('../Models/user');
  

此内容已编辑

 function loginRouteHandler(req, res) {
  user.findOne(
    {
      where: {
        userName: req.body.userName,
      },
    },
  )
    .then((data) => {
      if (bcrypt.compareSync(req.body.password, data.password)) {
        req.session.userName = req.body.userName;
        req.session.password = req.body.password;
        console.log(req.session);
        res.status(200).send('Success!');
      } else {
        res.status(400).send('some text');
      }
    });
}

    User.route('/').get(getRouteHandler);

    User.route('/register').post(postRouteHandler);

    User.route('/login').post(loginRouteHandler);

    module.exports = User;

这是提取调用:

fetch('http://localhost:4000/login',{
  method: 'POST',
  headers: {
    'Accept': 'application/json,text/plain, */*',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    userName: this.state.userName,
    password: this.state.password,

  }),

}).then((response)=>{
if(response.ok){
  console.log(response)
}
else {
  console.log("a problem")
}
}).then((data)=>{
console.log(data)
});

2 个答案:

答案 0 :(得分:0)

从response.ok中删除ok

删除.then((data)=> {console.log(data)});

并检查控制台日志。

}).then((response)=>{
if(response){
  console.log(response)
}
else {
  console.log("a problem")
}
}).then((data)=>{
console.log(data)
});

答案 1 :(得分:0)

在您的loginRouteHandler中,如果bcrypt比较成功,则响应中将不返回任何内容。因此,在if语句的第一分支中,放入res.send('Success!')或类似的内容。

这是一个例子:

function loginRouteHandler(req, res) {
  user.findOne(
    {
      where: {
        userName: req.body.userName,
      },
    },
  )
    .then((data) => {
      if (bcrypt.compareSync(req.body.password, data.password)) {
        req.session.userName = req.body.userName;
        req.session.password = req.body.password;
        console.log(req.session);
        res.status(200).send('Success!');
      } else {
        res.status(400).send('some text');
      }
    });
}

更新:您也无法通过.text().json()获得获取响应的输出。您必须将fetch调用更新为以下内容:

fetch(/* stuff */).then((response)=>{
if(response.ok){
  console.log(response)
}
else {
  console.log("a problem")
}
return response.text()
}).then((data)=>{
console.log(data)
});