I am new to nodejs and I'm getting reference error: io is not defined ,I can't figure it out
I am new to nodejs and I'm getting reference error: io is not defined ,I can't figure it out
我是 nodejs 的新手,每次我 运行 我的服务器使用 nodemon server.js 时,我都会收到未捕获的引用错误:io is not defined at script.js:1,我不知道出了什么问题
任何帮助将不胜感激!!
那是我的 script.js 文件
const socket = io('/');
const videoGrid = document.getElementById('video-grid');
const myVideo = document.createElement('video');
myVideo.muted = true;
socket.emit('join-room');
let myVideoStream;
const addVideoStream = (video, stream) => {
video.srcObject = stream;
video.addEventListener('loadedmetadata', () => {
video.play();
});
videoGrid.append(video);
};
navigator.mediaDevices
.getUserMedia({
video: true,
audio: true,
})
.then((stream) => {
myVideoStream = stream;
addVideoStream(myVideo, stream);
});
这是我的 server.js 文件
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const { v4: uuidv4 } = require('uuid');
app.use(express.static('public'));
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
res.redirect(`/${uuidv4()}`);
});
app.get('/:room', (req, res) => {
res.render('room', { roomId: req.params.room });
});
io.on('connection', (socket) => {
socket.on('join-room', () => {
console.log('join room');
});
});
app.listen(8000, () => {
console.log('server is running');
});
那是我的 room.ejs 文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Streamy!!</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<h1>bello</h1>
<div id="video-grid"></div>
<script src="script.js"></script>
</body>
</html>
解决方案 1)
您应该使用
启动服务器
server.listen(8000, () => {
console.log('server is running');
});
而不是 app.listen,以便从 /socket.io/socket.io.js 路径中获取 socket.io.js 文件.
解决方案 2)
如果无法使用解决方案 1,请使用 CDN 更改 socket.io.js 路径以要求 socket.io.js 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Streamy!!</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h1>bello</h1>
<div id="video-grid"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
<script src="/script.js"></script>
</body>
</html>
你需要像这样在脚本中添加它
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Streamy!!</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
</script>
</head>
<body>
<h1>bello</h1>
<div id="video-grid"></div>
<script src="/script.js"></script>
</body>
</html>
并开始使用套接字作为它现在的全局变量
请确保 socket.io.js 文件是否在 html 文件中可访问(您可以在“检查”菜单下检查“网络”选项卡一次)。
尝试将您的脚本标签中的 URL 替换为下面的 re-run。
<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
我是 nodejs 的新手,每次我 运行 我的服务器使用 nodemon server.js 时,我都会收到未捕获的引用错误:io is not defined at script.js:1,我不知道出了什么问题
任何帮助将不胜感激!!
那是我的 script.js 文件
const socket = io('/');
const videoGrid = document.getElementById('video-grid');
const myVideo = document.createElement('video');
myVideo.muted = true;
socket.emit('join-room');
let myVideoStream;
const addVideoStream = (video, stream) => {
video.srcObject = stream;
video.addEventListener('loadedmetadata', () => {
video.play();
});
videoGrid.append(video);
};
navigator.mediaDevices
.getUserMedia({
video: true,
audio: true,
})
.then((stream) => {
myVideoStream = stream;
addVideoStream(myVideo, stream);
});
这是我的 server.js 文件
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const { v4: uuidv4 } = require('uuid');
app.use(express.static('public'));
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
res.redirect(`/${uuidv4()}`);
});
app.get('/:room', (req, res) => {
res.render('room', { roomId: req.params.room });
});
io.on('connection', (socket) => {
socket.on('join-room', () => {
console.log('join room');
});
});
app.listen(8000, () => {
console.log('server is running');
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Streamy!!</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<h1>bello</h1>
<div id="video-grid"></div>
<script src="script.js"></script>
</body>
</html>
解决方案 1) 您应该使用
启动服务器server.listen(8000, () => {
console.log('server is running');
});
而不是 app.listen,以便从 /socket.io/socket.io.js 路径中获取 socket.io.js 文件.
解决方案 2) 如果无法使用解决方案 1,请使用 CDN 更改 socket.io.js 路径以要求 socket.io.js 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Streamy!!</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<h1>bello</h1>
<div id="video-grid"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
<script src="/script.js"></script>
</body>
</html>
你需要像这样在脚本中添加它
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Streamy!!</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
</script>
</head>
<body>
<h1>bello</h1>
<div id="video-grid"></div>
<script src="/script.js"></script>
</body>
</html>
并开始使用套接字作为它现在的全局变量
请确保 socket.io.js 文件是否在 html 文件中可访问(您可以在“检查”菜单下检查“网络”选项卡一次)。
尝试将您的脚本标签中的 URL 替换为下面的 re-run。
<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>