Axe ios сообщение дает мне ошибку: Внутренняя ошибка сервера - PullRequest
0 голосов
/ 22 февраля 2020

Я делаю почтовый запрос с Ax ios и выдает мне эту ошибку:

xhr. js: 178 POST http://localhost: 3000 / зависимости 500 (Внутренняя ошибка сервера)

Я видел, как люди спрашивали об этом, но ни одно из их решений не помогло мне! Я не знаю, если что-то не так в этом компоненте или у меня что-то не так со стороны сервера.

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

class LogIn extends Component {
  constructor(props) {
    super(props);
    this.state = {
      email: "",
      password: ""
    };
    this.handleSubmit = this.handleSubmit.bind(this);
    this.handleChangeEmail = this.handleChangeEmail.bind(this);
    this.handleChangePass = this.handleChangePass.bind(this);
  }

  handleChangeEmail = e => {
    this.setState({ email: e.target.value });
    //console.log(e.target.value);
  };

  handleChangePass = e => {
    this.setState({ password: e.target.value });
    //console.log(e.target.value);
  };

  handleSubmit = e => {
    /*this.props.history.push('/');
        console.log(this.props);*/

    event.preventDefault();

    let data = JSON.stringify({
      email: this.state.email,
      password: this.state.password
    });
    let url = "http://localhost:3000/dependentes";
    const response = axios.post(url, data, {
      headers: { "Content-Type": "application/json" }
    });
  };

  render() {
    return (
      <div className="container">
        <form onSubmit={this.handleSubmit} className="white">
          <h5 className="grey-text text-darken-3">Log In</h5>
          <div className="input-field">
            <label htmlFor="email">Email</label>
            <input
              type="email"
              id="email"
              onChange={this.handleChangeEmail}
              value={this.state.email}
            />
          </div>
          <div className="input-field">
            <label htmlFor="password">Password</label>
            <input
              type="password"
              id="password"
              onChange={this.handleChangePass}
            />
          </div>
          <div className="input-field">
            <button className="btn orange lighten-1 z-depth-0">Log In</button>
          </div>
        </form>
      </div>
    );
  }
}

export default LogIn;

1 Ответ

1 голос
/ 22 февраля 2020

Согласно вашему node.js коду, который вы НЕ используете body-parser, поэтому получение электронной почты от req.body приведет к ошибке, поскольку req.body не определено.

Кроме того, если вы этого не сделаете верните запрос, например res.send или res.json, он всегда будет зависеть от внешнего интерфейса, так как запрос не закрыт.

Итак, для редактирования вашего кода

//installed express, mysql, cors

const config = require('./database/config');
const express = require('express');
const cors = require('cors');
const port = 4000;
const app = express();
const mysql = require('mysql');
const bodyParser = require('body-parser'); // <=== this line
app.use(cors());
app.use(bodyParser.json()); //<=== This line

const SELECT_ALL_ADDICTS_QUERY = 'SELECT * FROM viciados';

const connection = mysql.createConnection(config.mysql);

connection.connect(err => {
  if (err) {
    return err;
  }
});

app.get('/', (req, res) => {
  res.send('Homepage. Go to /dependentes para ver os dependentes no sistema');
  res.end();
});

app.get('/dependentes', (req, res) => {
  connection.query(SELECT_ALL_ADDICTS_QUERY, (err, results) => {
    if (err) {
      res.send(err);
    } else {
      res.json({
        data: results
      });
    }
  });
});

app.post('/dependentes', (req, res) => {
  console.log(req.body.email);
  res.json({ email: req.body.email }); ///<== and this line
});

app.listen(port, err => {
  return err
    ? console.log(`error founded: ${err}`)
    : console.log(`server runnning on port: ${port}`);
});


...