Websocket与spring boot和react.js的连接
P粉615829742
P粉615829742 2024-03-27 00:45:53
[React讨论组]

我正在尝试将我的react.jsocks客户端连接到我的spring boot后端Web套接字,但我无法连接它们,它在chrome控制台上给了我一些错误,如下所示:

chrome 控制台错误

我的 Spring Boot 部分没有任何错误,但有一些类似的警告:

弹簧启动控制台

为什么我无法连接它们我的react.js部分是这样的:

import background from'../Styles/Background.module.css'
import formdesign from'../Styles/FormDesign.module.css'
import Bounce from 'react-reveal/Bounce';
import cookies from 'js-cookie'
import Menustyle from'../Styles/Menu.module.css'
import {useLocation, useNavigate} from 'react-router-dom';
import { useState ,useEffect } from 'react';
import swal from 'sweetalert';
import Swal from 'sweetalert2'
import { connect } from 'react-redux';
import { Oval } from 'react-loader-spinner';
import {GetWithAuth ,GetWithRefresh,beforeRegister,registerWithMail, beforeLogin} from '../Services/HttpServices';
import { isUserBlockExist } from '../Services/UserPrefs';
import SockJS from 'sockjs-client';
import { over } from 'stompjs';
let number = 1;
const Login  = (props)=>{
  const navigate = useNavigate();
  const location = useLocation();
  const [isLoading, setIsLoading] = useState(true);
  const [allState,setAllState] = useState({
    title:props.title,
    message:props.message,
    button:props.button,
    show:true
  });
   const beforeLoad = async ()=>{ 
    let sock = new SockJS(`${process.env.REACT_APP_ROOT_URL}/wss`);
    let stompClient = over(sock);
    stompClient.connect({},function(frame){
      console.log("Connected : "+frame);
      //stompClient.subscribe("/user-connect/user",this.onPrivateMessage);
    });
    try{
    console.log(process.env.REACT_APP_ROOT_URL);
    let response = await GetWithAuth(`${process.env.REACT_APP_ROOT_URL}/auth/route`,"/homepage",props.jwtsession);
    if(response.route == "/"){
      document.body.className = background.deneme;
      props.setJwtSession("");
      //localStorage.removeItem("jwtsession");
    }
    else{
      document.body.className = Menustyle.deneme;
    }
    setIsLoading(false);
    navigate(response.route);
     }
     catch{
      window.location.reload();
     }
    }
      const handleClick = ()=>{
          if(allState.show === false && number === 1){
              setAllState({show:true,message:"Have Account ?",title:"Sign-Up"});
            }
          else if(allState.show === false && number === 2){
            setAllState({show:true,message:"Don't Have Account ?",title:"Login"});
          }
          
      }
      const submit = async()=>{
        if(document.getElementById("password").value.trim().length ==0){
          swal({
            title: "Password Field Is Required!",
            text: "Please Write Your Password",
            icon: "error",
            button: "Close This Alert",
          });
        }
        else if(document.getElementById("username").value.trim().length ==0){
          swal({
            title: "Username Field Is Required!",
            text: "Please Write Your Username",
            icon: "error",
            button: "Close This Alert",
          });
        }
        else if(document.getElementById("username").value.trim().length >=15&&allState.title!="Login"){
          swal({
            title: "Username Can Not More Than 15 Characters",
            text: "Please Try Another Username",
            icon: "error",
            button: "Close This Alert",
          });
         }
       else if(document.getElementById("email")!=null && document.getElementById("email").value.trim().length ==0){
        swal({
          title: "E-Mail Field Is Required!",
          text: "Please Write Your E-Mail",
          icon: "error",
          button: "Close This Alert",
        });
     
       }
         else if(allState.title === "Sign-Up"){
          let postres = await beforeRegister(`${process.env.REACT_APP_ROOT_URL}/auth/beforeregister`,document.getElementById("username").value.trim(),document.getElementById("email").value,document.getElementById("password").value); 
          if(postres.created == true){
             Swal.fire({
              html:`

Please Write The Code We Sent To Your Email



You Have seconds.

`, timer:90000, icon: "success", allowOutsideClick:false, showCancelButton:true, didOpen: ()=>{ const content = Swal.getHtmlContainer() const $ = content.querySelector.bind(content) const send = $('#send'); const code = $('#code'); send.addEventListener("click",async()=>{ let postres2 = await registerWithMail(`${process.env.REACT_APP_ROOT_URL}/auth/registerwithmail`,code.value.trim().toLowerCase()); if(postres2.created == true){ props.setJwtSession(postres2.accessToken); //localStorage.setItem("jwtsession",postres2.accessToken); navigate('/homepage'); Swal.close(); } else if(postres2.created == false){ Swal.close(); swal({ title: postres2.error, text: "Please Check And Try Again", icon: "error", button: "Close This Alert", }); } }); Swal.showLoading(); setInterval(() => { Swal.getHtmlContainer().querySelector('strong') .textContent = (Swal.getTimerLeft() / 1000) .toFixed(0) }, 100) }}) } else{ swal({ title: postres.error, text: "Please Check And Try Again", icon: "error", button: "Close This Alert", }); } } else if(allState.title === "Login"){ let postres = await beforeLogin(`${process.env.REACT_APP_ROOT_URL}/auth/beforelogin`,document.getElementById("username").value.trim(),document.getElementById("password").value); if(postres.created == true){ Swal.fire({ html:`

Please Write The Code We Sent To Your Email



You Have seconds.

`, timer:90000, icon: "success", allowOutsideClick:false, didOpen: ()=>{ const content = Swal.getHtmlContainer() const $ = content.querySelector.bind(content) const send = $('#send'); const code = $('#code'); send.addEventListener("click",async()=>{ let postres2 = await registerWithMail(`${process.env.REACT_APP_ROOT_URL}/auth/loginwithmail`,code.value.trim().toLowerCase()); if(postres2.created == true){ props.setJwtSession(postres.accessToken.toString()); console.log(postres.accessToken); navigate('/homepage'); Swal.close(); } else if(postres2.created == false){ Swal.close(); swal({ title: postres2.error, text: "Please Check And Try Again", icon: "error", button: "Close This Alert", }); } }); Swal.showLoading(); setInterval(() => { Swal.getHtmlContainer().querySelector('strong') .textContent = (Swal.getTimerLeft() / 1000) .toFixed(0) }, 100) }}) } else if(postres.created === false && postres.blocked == false){ swal({ title: postres.error, text: "Please Check And Try Again", icon: "error", button: "Close This Alert", }); console.log(postres); } else{ swal({ title: postres.error, text: "Please Check And Try Again", icon: "error", button: "Close This Alert", }); } } } useEffect(() =>{ beforeLoad(); },[]); useEffect( ()=>{ setTimeout(() => { if(allState.show === true && number === 1){ setAllState({show:false,message:"Have Account ?",title:"Sign-Up"}); number = 2; console.log(allState.message); } else if(allState.show === true && number === 2){ setAllState({show:false,message:"Don't Have Account ?",title:"Login"}); number = 1; } }, 300); },[allState]); if (isLoading) { return
; } return(

{allState.title}

{allState.title =="Sign-Up" && }

{allState.message} Click Here

);} const mapStateToProps = (state)=>{ return{ jwtsession:state.jwtsession } } const mapDispatchToProps = (dispatch) =>{ return{ setJwtSession: (jwtsession) =>{ dispatch({'type':'SET_JWTSESSION',jwtsession})} } } export default connect(mapStateToProps,mapDispatchToProps) (Login);

和我的 Spring Boot 配置类:

package com.project.blog.websocket;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {

    @Value("${blog.app.front}")
    private String url;
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/wss").setAllowedOrigins(url).setAllowedOriginPatterns("*").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.setApplicationDestinationPrefixes("/app");
        registry.enableSimpleBroker("/user-connect");
        registry.setUserDestinationPrefix("/user");
    }


}

同样对于网络套接字控制器我写了这部分:

package com.project.blog.websocket;

import com.project.blog.entities.User;
import com.project.blog.repositories.UserRepository;
import com.project.blog.responses.ErrorSuccessResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller;

import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;

@Controller
@RequiredArgsConstructor
public class WebSocketController {


    private final SimpMessagingTemplate simpMessagingTemplate;
    private final UserRepository userRepository;

    @MessageMapping("/message")
    private ErrorSuccessResponse receiveMessage(String user){
        ErrorSuccessResponse errorSuccessResponse = new ErrorSuccessResponse();
        errorSuccessResponse.setError("block oldu");
    simpMessagingTemplate.convertAndSendToUser(user,"/private",errorSuccessResponse);
    return errorSuccessResponse;
    }
    @Scheduled(fixedDelay = 1000)
    private void checkBlocks(){
        LocalDateTime now = LocalDateTime.now();
        List users = userRepository.findBlockedUsers(now);

        users.stream().forEach(user->{
            receiveMessage(user.getUsername());
        });
    }
}

我尝试使用袜子连接我的react.js前端和spring boot后端,但我做不到

我的 process.env.REACT_APP_ROOT_URL 是:http://localhost:1998 和@Value(“${blog.app.front}”) 私有字符串 url;这部分值是:http://localhost:3000

P粉615829742
P粉615829742

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号