我在我的Phoenix / React应用中的Chrome控制台中出现此错误 - 但奇怪的是,在隐身模式下不。所有内容都指向相同的/socket
端点。
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());
React应用程序如下所示找到端点:
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 });
}
注意:将该行修改为const socket = new Socket('${WEBSOCKET_URL}/socket/websocket'
只会将错误读为.../socket/websocket/websocket?...
。
endpoint.ex
非常标准:
socket "/socket", App.UserSocket
但这些都没有说明为什么该应用会以隐身方式工作,否则会加载所有这些错误。
答案 0 :(得分:7)
我会发布我如何解决这个问题,因为它可能对其他人有所帮助,尽管我并不确定为什么会这样。只需将正面和背面的localhost
更改为IP地址:
在config.ex
:
config :app, App.Endpoint,
url: [host: "127.0.0.1"]...
在你的前端:
const API_URL = 'http://127.0.0.1:4000/api';