【问题标题】:How to get console log from axios promise如何从 axios promise 获取控制台日志
【发布时间】:2019-07-31 02:08:12
【问题描述】:

这快把我逼疯了。我无法从我的 axios POST 请求中看到 response 对象。

import React, {
  Component
} from 'react';
import axios from 'axios';

class SignUp extends Component {
  state = {
    name: '',
    email: '',
    password: ''
  };

  handleNameChange = e => {
    this.setState({
      name: e.target.value
    });
  };

  handleEmailChange = e => {
    this.setState({
      email: e.target.value
    });
  };

  handlePasswordChange = e => {
    this.setState({
      password: e.target.value
    });
  };

  handleSubmit = e => {
    e.preventDefault();
    const {
      name,
      email,
      password
    } = this.state;
    const user = {
      name: name,
      email: email,
      password: password
    };
    axios
      .post('http://localhost:7777/signup', {
        user
      })
      .then(function(response) {
        console.log(response);
      })
      .catch(function(error) {
        console.log(error);
      });
  };

  render() {
    return ( <
      form className = "form-signin"
      onSubmit = {
        this.handleSubmit
      } >
      <
      h2 className = "form-signin-heading" > Please sign up < /h2> <
      label htmlFor = "inputName"
      className = "sr-only" >
      Name <
      /label> <
      input type = "name"
      name = "name"
      onChange = {
        this.handleNameChange
      }
      id = "inputName"
      className = "form-control"
      placeholder = "Name"
      required /
      >
      <
      label htmlFor = "inputEmail"
      className = "sr-only" >
      Email address <
      /label> <
      input type = "email"
      name = "email"
      onChange = {
        this.handleEmailChange
      }
      id = "inputEmail"
      className = "form-control"
      placeholder = "Email address"
      required /
      >
      <
      label htmlFor = "inputPassword"
      className = "sr-only" >
      Password <
      /label> <
      input type = "password"
      name = "password"
      onChange = {
        this.handlePasswordChange
      }
      id = "inputPassword"
      className = "form-control"
      placeholder = "Password"
      required /
      >

      <
      button className = "btn btn-lg btn-primary btn-block"
      type = "submit" >
      Sign up <
      /button> <
      /form>
    );
  }
}

export default SignUp;

有人请告诉我我错过了什么。我正在收到服务器 console 消息。但我在浏览器开发人员工具中看不到该消息。

这是我的后端代码。

const express = require('express');
const bodyParser = require("body-parser");
const cors = require("cors");

const app = express();

app.use(bodyParser.json());
app.use(cors({
  origin: "http://localhost:3019"
}));

app.post('/signin', function(req, res) {
  let useremail = req.body.email;
  let password = req.body.password;
  if (useremail && password) {
    console.log('success')
  } else {
    console.log('Failure');
  }
});

app.post('/signup', function(req, res) {
  let userfullname = req.body.fullname;
  let useremail = req.body.email;
  let password = req.body.password;
  console.log(`
    Thank you ${userfullname} for signing up, 
    your login credentials are 
    login: ${useremail}
    password: ${password}  
  `)
});

app.listen(7777, function() {
  console.log("Started listening on port", 7777);
})

【问题讨论】:

  • 您在 chrome devtools 的网络选项卡中看到了吗? API 是否获得了成功标头?
  • 看起来差不多。在您的网络选项卡中看到请求?根本没有显示成功或捕获的日志?页面是否与 api 端点位于同一端口 7777 上?
  • 不,它只是说待处理
  • app.post 没有返回响应。添加类似res.json(req.body)
  • 你的回复怎么样

标签: javascript reactjs axios react-dom


【解决方案1】:

您需要确保您的请求处理程序 return a response,每个请求。

例如,您可以发送 JSON 响应以向客户端/浏览器发送信号,表明请求已通过以下方式处理并完成:

app.post('/signin', function(req, res) {
  let useremail = req.body.email;
  let password = req.body.password;
  if (useremail && password) {
    console.log('success')
  } else {
    console.log('Failure');
  }

  /* 
  Add this: send a json response to client 
  */
  res.json({ message : 'sign in request completed' });
});

app.post('/signup', function(req, res) {
  let userfullname = req.body.fullname;
  let useremail = req.body.email;
  let password = req.body.password;
  console.log(`
    Thank you ${userfullname} for signing up, 
    your login credentials are 
    login: ${useremail}
    password: ${password}  
  `)

  /* 
  Add this: send a json response to client 
  */
  res.json({ message : 'sign up request completed' });
});

除了json(),express 框架的Response interface 还提供了其他响应方法,例如send()end(),它们可能更适合您的用例。

这里的关键概念是传入的请求应该有一个相应的响应发送回客户端。这允许客户端正确响应发送到您的服务器的网络请求并从中恢复。

【讨论】:

    【解决方案2】:

    您必须至少调用res.json('Success'); 才能看到任何响应。现在后端 API 代码在两个 API 上都没有响应

    所以修改后的代码看起来像

    const express = require('express');
    const bodyParser = require("body-parser");
    const cors = require("cors");
    
    const app = express();
    
    app.use(bodyParser.json());
    app.use(cors({
      origin: "http://localhost:3019"
    }));
    
    app.post('/signin', function(req, res) {
      let useremail = req.body.email;
      let password = req.body.password;
      if (useremail && password) {
        res.json({status:'Success'});
      } else {
        res.json({status:'Failed'});
      }
    });
    
    app.post('/signup', function(req, res) {
      let userfullname = req.body.fullname;
      let useremail = req.body.email;
      let password = req.body.password;
      res.json({messahge:`
        Thank you ${userfullname} for signing up, 
        your login credentials are 
        login: ${useremail}
        password: ${password}  
      `})
    
    
    });
    
    app.listen(7777, function() {
      console.log("Started listening on port", 7777);
    })
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 2012-04-27
      • 2013-08-18
      • 2019-08-15
      • 2020-08-01
      • 1970-01-01
      相关资源
      最近更新 更多