PUT请求在Axios上不起作用

时间:2018-07-19 19:59:34

标签: javascript reactjs http axios put

我想更新在后端使用 Node.js ,在前端使用 React MySQL 开发的表行的数据关于数据库。

我的编辑课程:

constructor(props) {
  super(props)
  this.state = {
    clients: [],
    Prenom: '',
    Nom: '',
    FAX: '',
    Telephone: '',
    Email: '',
    Adresse1: '',
    Adresse2: '',
    Code: props.match.params.Code
  }
  // this.logChange = this.logChange.bind(this);
  this.handleEdit = this.handleEdit.bind(this);
}
handleEdit(event) {
  //Edit functionality
  //event.preventDefault()
  var client = {
    Prenom: this.state.Prenom,
    Nom: this.state.Nom,
    FAX: this.state.FAX,
    Telephone: this.state.Telephone,
    Email: this.state.Email,
    Adresse1: this.state.Adresse1,
    Adresse2: this.state.Adresse2
  }
  axios({
    method: 'put',
    url: "http://localhost:4000/app/editclient/" + this.props.match.params.Code,
    data: client,
    withCredentials: true,
    headers: {
      "Access-Control-Allow-Origin": "*",
      "Content-Type": "application/json",
      "Accept": "application/json",
    }
  }).then(function(response) { // empty form
    this.setState({
      Code: ""
    });
    this.setState({
      Prenom: ""
    });
    this.setState({
      Nom: ""
    });
    this.setState({
      FAX: ""
    });
    this.setState({
      Telephone: ""
    });
    this.setState({
      Email: ""
    });
    this.setState({
      Adresse1: ""
    });
    this.setState({
      Adresse2: ""
    });
  }.bind(this)).catch(function(error) {
    console.log(error);
  });
  event.preventDefault();
}
<Button type="submit" color="success" onClick={(event) => this. handleEdit(event)} >Modifier</Button>

我的路由器:

exports.editclient = function(req, res) {
  var data = {
    Prenom: req.body.Prenom,
    Nom: req.body.Nom,
    FAX: req.body.FAX,
    Telephone: req.body.Telephone,
    Email: req.body.Email,
    Adresse1: req.body.Adresse1,
    Adresse2: req.body.Adresse2,
  };
  var Code = req.params.Code
  console.log(req.params);
  // var Code = data.Code
  connection.query("UPDATE clients set ? WHERE Code = ? ", [data, req.params.Code], function(error, results, fields) {
    if (error) throw error;
    else {
      res.send(JSON.stringify(results));
      console.log("Data is updated");
    }
  });
};

我的服务器:

router.put('/editclient/:Code', clients.editclient);

我使用URL为http://localhost:4000/app/editclient/2222的Postman运行后端,效果很好,但是运行前端时,数据没有更新,我得到了:

enter image description here

我该如何解决?

1 个答案:

答案 0 :(得分:2)

您尝试访问的localhost:4000服务器未启用跨域资源共享(CORS)。这就是为什么它不起作用。

另一方面,它可与Postman一起使用,因为Postman是开发工具,而不是浏览器。因此,它不会受到未启用CORS的影响。

这里是easiest way to enable CORS support to your server, if you use Express for NodeJS

  

使用node.js软件包cors。的   最简单的用法是:

var cors = require('cors')

var app = express()
app.use(cors())