2017-06-13 116 views
1

我在Phoenix/React应用的Chrome控制台中出现此错误 - 但奇怪的是,而不是处于隐身模式。一切都指向相同的/socket端点。phoenix.js:WebSocket连接到ws:// localhost:4000 /套接字失败

WebSocket connection to 'ws://localhost:4000/socket/websocket?token=blah&vsn=1.0.0' failed: Error during WebSocket handshake: Unexpected response code: 400 

Various sources说这是对传输层,这使得位的意义,因为这是在控制台突出显示错误所在:

this.conn = new this.transport(this.endPointURL()); 

的阵营应用发现端点就像这样:

const API_URL = 'http://localhost:4000/api'; 
const WEBSOCKET_URL = API_URL.replace(/(https|http)/, 'ws').replace('/api', ''); 

function connectToSocket(dispatch) { 
    const token = JSON.parse(localStorage.getItem('token')); 
    const socket = new Socket(`${WEBSOCKET_URL}/socket`, { 
    params: { token }, 
    }); 
    socket.connect(); 
    dispatch({ type: 'SOCKET_CONNECTED', socket }); 
} 

NB:修订该行const socket = new Socket('${WEBSOCKET_URL}/socket/websocket'只是使误差读.../socket/websocket/websocket?...

endpoint.ex是非常标准:

socket "/socket", App.UserSocket 

的这一切都指向应用程式为何在隐身工作,否则加载所有这些错误,但。

回答

2

我会发布我如何解决这个问题,因为它可能会帮助别人,但我不确定为什么这样。只要改变localhost在前面和后面的IP地址都:

config.ex

config :app, App.Endpoint, 
    url: [host: "127.0.0.1"]... 

在您的前端:

const API_URL = 'http://127.0.0.1:4000/api'; 
相关问题