response.js, отправляющий строку или json через исключение - PullRequest
1 голос
/ 20 сентября 2019

Когда кто-то нажимает на Signup, логика, которую я использую для создания учетной записи, такова:

  1. Сначала создайте User в моей базе данных.

    createUser = () =>{
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://localhost:8080/user/');
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.send(JSON.stringify({  }));
    let that=this;
    xhr.onreadystatechange= function() {
        if (this.readyState === 4 && this.status === 200) {
            that.state.newUser= this.responseText.toString();
        }
    };
    };
    
  2. Затем создайте LoginCredential в моей базе данных:

    onButtonClick = () =>{
    
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://localhost:8080/login/');
    xhr.setRequestHeader("Content-Type", "application/json");
    this.createUser();
    xhr.send(JSON.stringify({ email: this.state.email,passwordHash:this.state.passwordHash,user:JSON.parse(this.state.newUser) }));
    };
    

Но это дает мне ошибку, говоря: POST http://localhost:8080/login/ 400

Если я изменю последнюю строку второго шага на: xhr.send(JSON.stringify({ email: this.state.email,passwordHash:this.state.passwordHash,user:JSON.parse(this.state.newUser) }));

В основном это изменение между user:JSON.parse(this.state.newUser) и user:this.state.newUser

Во второмПодход Я получаю два исключения:

  1. Uncaught SyntaxError: Unexpected end of JSON input
  2. Uncaught Error: A cross-origin error was thrown. React doesn't have access to the actual error object in development.

Исключение Spring Boot предоставление:

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of 'com.mua.cse616.Model.User' (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value (''); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of 'com.mua.cse616.Model.User' (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('')

Что здесь не так?Как это исправить?

this.state.newUser содержит значение примерно так {"userID":577}

Я использую Spring Boot на моей стороне сервера.Все Controller классы помечены @CrossOrigin(origins = "http://localhost:3000")

При необходимости по какой-то причине мой User класс:

public class User {
    @Id @GeneratedValue Long userID;
    @OneToOne(fetch = FetchType.LAZY,targetEntity = LoginCredential.class)
    @JoinColumn(name = "userID",referencedColumnName = "userID")
    @JsonIgnore
    private LoginCredential loginCredential;
}

И LoginCredential класс:

public class LoginCredential {
    @Id @GeneratedValue Long userID;
    String eMail;
    String passwordHash;
    @OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY)
    User user;
}

1 Ответ

0 голосов
/ 20 сентября 2019

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

сначала выполните в вашем приложении реагирования

npm, установите http-промежуточное ПО прокси - сохранить

добавить файл setupProxy.js в публичный каталог / src /

//run defferent ports for website and api server 
const proxy = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(proxy('/api/', { target: 'http://localhost:8080/' })); //make change as per your need
};

, если вы не используете '/ api /', замените его на '/'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...