Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   node.js + react не принимает пост запрос (https://javascript.ru/forum/node-js-io-js/73436-node-js-react-ne-prinimaet-post-zapros.html)

korih 15.04.2018 17:52

node.js + react не принимает пост запрос
 
всем добрый день. с толкнулся с проблемой.
для теста написал на node пост обработку на запись в mysql:
var mysql = require('mysql');
var express = require('express');

var http = require('http');
var bodyParser = require('body-parser');


var app = express();


var connect = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'react'
});

connect.connect();

app.use(bodyParser.urlencoded({
    extended: false
  }));

app.use(bodyParser.json());

app.post('/server', function(req,res,next){
    console.log(JSON.stringify(req.body));
    connect.query('insert into users(name,login,password) values('+req.body.name+','+req.body.login+','+req.body.password+')', function(error, results, fields){
        console.log(results);
        res.send(JSON.stringify(results));
    }
    )
});

app.listen(3000)

connect.end();


на react написал компонент для отправки данный:
import React, {Component} from "react";
import logo from '../logo.svg';

export default class Auth extends Component {
    constructor(props){
        super(props)

        this.state = {
            name: '',
            login: '',
            password: '',
            preloader: false
        }

        this.sendSession = this.sendSession.bind(this)
    }

    sendValue(e){
        this.setState({[e.target.name]: e.target.value});
    }

    send_sql = (event) => {

        this.setState({preloader:true});

        event.preventDefault();

        var data = {
            name: this.state.name,
            login: this.state.login,
            password: this.state.password
        }
        fetch("http://localhost:3000/server", {
            method: 'POST',
            mode: 'no-cors',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify(data)
        }).then(function(response){
            if(response.status >= 400)
            {
                throw new Error('Bad response from server');
            }
            return response.json();
        }).then(function(data){
            console.log(data);
            if(data == "success")
            {
                console.log('Request complete');
            }
        }).catch(function(err){
            console.log(err);
        });


    }

    sendSession = () => this.props.session(true);

    render(){
        return (
            <div className="block">
            {
                !this.state.preloader ? 
                <form method="post">
                <div id="result-auth-error"></div>
                <div id="result-auth-success"></div>
                    <span>Name</span>
                    <input type="text" onChange={this.sendValue.bind(this)}  name="name"/>
                    <span>Login</span>
                    <input type="text" onChange={this.sendValue.bind(this)}  name="login"/>
                    <span>Password</span>
                    <input type="password" onChange={this.sendValue.bind(this)}  name="password"/>
                    <button onClick ={this.send_sql}>Login</button>
                    <div className="clear"></div>
                </form> : 
                <div className="preloader">
                    <img src={logo} width="50" alt="loading..."/>
                </div>
            }
            </div>
        )    
    }
}


во вкладке сеть в окне разработчика статус отправки "200", данные отправляются, но в node они не принимаются, тело req.body пустое.

а в консоле ошибка "SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data". в чём может быть проблема?


Часовой пояс GMT +3, время: 04:25.