簡體   English   中英

無法連接到套接字 - Vanilla JS 到 node.js

[英]Unable to connect to socket - Vanilla JS to node.js

我正在嘗試使用 socket.io,但是我無法在我的客戶端(Vanilla HTML/JS)和我的服務器(node.js)之間建立連接。

服務器代碼:

const express = require('express');
var cors = require('cors');
const app = express();

app.use(cors())
app.use(express.json());
app.use(express.urlencoded());

var server = app.listen(3001, () => console.log('Listening on port 3001!'));
const io = require('socket.io')(server)

io.on('connection', (socket) => {
    console.log("A user connected");
    socket.on('disconnect', () => {
        console.log("user disconnected")
    })
})

我也有幾個端點和函數暴露在同一個文件中,雖然它們看起來並不相關(據我所知),所以我沒有在這里包含它們,但如果需要的話可以。

HTML:

<head>
    <script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
    <script src="../scripts/index.js"></script>
</head>

index.js:

window.onload = () => {
    var socket = io("http://localhost:3001")
    socket.on('connect', () => {
        console.log("Connected")
        console.log(socket.connected)
    })
    socket.on('test', () => {
        console.log("In test socket on")
    })
}

我似乎沒有在控制台或任何東西中拋出任何錯誤,並且不確定問題出在哪里。

我有一個類似的問題。 我通過在 cors 上指定原點來解決它。 不要只允許所有來源通過 cors。 代替app.use(cors()) ,使用app.use(cors({ credentials: true, origin: 'http://localhost:8080', optionsSuccessStatus: 200 }))或任何你的前端服務器端口。 socket.io 還具有在初始化時設置原點的選項。 嘗試這個。 const io = require('socket.io')(server, { origins: '*:*'});

事實證明,我對客戶端和服務器的配置都還可以,但似乎問題出在我使用的socket.io版本上。 我使用的版本是3.0.3 ,但是當它回滾到1.7.4時,設置已經成功並且我能夠成功連接到套接字。 這無論如何都不是一個理想的情況,我相信對於版本 3,必須修改配置。 作為一種快速的臨時解決方案,這可能會有所幫助,盡管這絕不是理想的生產級解決方案。

我有同樣的問題。 我所做的只是讓 Express 知道我的 static 文件在哪里。 和:

app.use(express.static(__dirname + '/public')) //Make sure you set here you actual folder 

(在我的例子中是“/public”)

我正在使用 Socket.io 文檔提供的 CDN:

<script src="https://cdn.socket.io/3.1.3/socket.io.min.js" integrity="sha384-cPwlPLvBTa3sKAgddT6krw0cJat7egBga3DJepJyrLl4Q9/5WLra3rrnMcyTyOnh" crossorigin="anonymous"></script>

此外,我在包含實現的實際 JS 腳本之前的結束正文標記之前的文件末尾聲明 CDN。

我也在使用res.sendFile(*insert here template path*)例如res.sendFile(__dirname + '/public/templates/index.html')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM