[英]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.