Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

14,944

Solution 1

You want a response in Json (with fetch):

console.log(response); // see the response before
return response.json();

But you send a html (server.js):

res.end('Success');

Try to send a json instead:

res.json({insert: "success"})

Solution 2

May be your response body is html,try to parse it in jSON and also try to add headers as

fetch('/', { 
  method: 'POST',
  data: {
    firstname: self.refs.FirstName,
    lastname: self.refs.LasttName,
    email: self.refs.Email,
    password: self.refs.Password,
    passwordconfirm: self.refs.PasswordConfirm
  },
  headers: { 
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
})
.then(function(response) {
  console.log(response);
  return response.json();
})
.then(function(body) {
  console.log(body);
});
Share:
14,944
Admin
Author by

Admin

Updated on July 12, 2022

Comments

  • Admin
    Admin almost 2 years

    I try to create signup page and send data to mysql db. I just wrote this codes.. server.js

      var mysql = require('mysql');
        var http = require('http');
        var port = process.env.PORT || 1337;
    
    
    
    
        var con = mysql.createConnection({
            host: "localhost",
            user: "*****",
            password: "*******",
            database: "node"
        });
    
        con.connect(function (error) {
            app.post('/', function (req, res) {
    
                var user = req.body;
    
                var query = connection.query('INSERT INTO signup(FirstName, LastName, Email,Password, PasswordConfirm) SET ?', user, function (err, result) {
    
                });
                res.end('Success');
            });
        });
    

    app.js this is my component.

    class Signup extends React.Component {
    
    
        constructor() {
            super();
            this.state = { user: {} };
            this.onSubmit = this.handleSubmit.bind(this);
        }
        handleSubmit(e) {
            e.preventDefault();
            var self = this;
    
            fetch('/', { 
                method: 'POST',
                data: {
                    firstname: self.refs.FirstName,
                    lastname: self.refs.LasttName,
                    email: self.refs.Email,
                    password: self.refs.Password,
                    passwordconfirm: self.refs.PasswordConfirm
    
                }
            })
              .then(function(response) {
                  return response.json()
              }).then(function(body) {
                  console.log(body);
              });
        }
    
    
        render(){
            return(
                <div>
    
    
            <form id="signup" onSubmit={this.onSubmit}>
                <input type="text" id="firstName" placeholder="FirstName" ref="firstname"/>
                <input type="text" id="lastName"  placeholder="LastName" ref="lastname"/>
                <input type="email" id="email" placeholder="Email" ref="email"/>    
                <input type="password" id="password" placeholder="Password" ref="password" />
                <input type="password" id="confirm" placeholder="PasswordConfirm"ref="passwordconfirm" />
                <input type="submit" />
    
            </form>
            </div>
    
                 )
        }}
    

    I just try to send data to mysql db. I got this error message -->Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

    Why?What is wrong?