【问题标题】:Failed to construct 'WebSocket': The URL '{{.}}' is invalid构造“WebSocket”失败:URL“{{.}}”无效
【发布时间】:2021-10-01 14:14:20
【问题描述】:

gorilla/websocket例子

在这个例子中:

https://github.com/gorilla/websocket/blob/e8629af678b7fe13f35dff5e197de93b4148a909/examples/echo/server.go#L79

WebSocket 由以下人员创建:

ws = new WebSocket("{{.}}");

示例运行良好。

问题

但是,我想在另一个 JS 代码中使用相同的代码,例如:


var ws;
ws = new WebSocket("{{.}}");
ws.onopen = function(evt) {
    console.log("OPEN SOCKET");
}
ws.onclose = function(evt) {
    console.log("CLOSE SOCKET");
    ws = null;
}
ws.onmessage = function(evt) {
    console.log("RESPONSE SOCKET: RECEIVED");
}
ws.onerror = function(evt) {
    console.log("ERROR: " + evt.data);
}
ws.send(positions);
ws.close();

我收到此错误:

未捕获(承诺中)DOMException:无法构造“WebSocket”:URL“{{.}}”无效。 在 AddObjectCommand.execute 处

我这样改变了 WebSocket:

ws = new WebSocket("ws://127.0.0.1:8080/echo");

但我仍然收到错误消息:

WebSocket 连接到“ws://127.0.0.1:8080/echo”失败:WebSocket 握手期间出错:意外响应代码:403

我无法弄清楚我做错了什么。我错过了什么?

修复403

403 错误已通过此建议得到解决:

https://github.com/gorilla/websocket/issues/367#issuecomment-375971418

通过添加:

upgrader.CheckOrigin = func(r *http.Request) bool { return true }

之前:

c, err := upgrader.Upgrade(w, r, nil)

当然,信任所有来源并不安全。只是临时修复。

又一个错误

但是又抛出了一个错误:

未捕获(承诺中)DOMException:无法在“WebSocket”上执行“发送”:仍处于 CONNECTING 状态。

【问题讨论】:

    标签: javascript websocket gorilla


    【解决方案1】:

    错误:

    未捕获(承诺中)DOMException:无法在“WebSocket”上执行“发送”:仍处于 CONNECTING 状态。

    通过 WebSocket 发送数据,通过其.onopen 回调解决:

    var positions = ...
    
    var ws;
    ws = new WebSocket("ws://127.0.0.1:8080/echo");
    ws.onopen = function(evt) {
        console.log("OPEN SOCKET");
        console.log("SEND: START");
        ws.send(positions);
        ws.close();
    }
    
    

    【讨论】:

    • 这不是 Go 代码。你为什么用go标记它?
    猜你喜欢
    • 2016-11-30
    • 2020-11-17
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多