客户端找不到 "socket.io.js" 文件
Client doesn't find "socket.io.js" file
我正在用 Express、Handlebars 和 Socket.IO 做一个个人项目。我很好地设置了 Express 和 Handlebars 部分,但是当我尝试将客户端连接到 socket.io(通过像页面上所说的那样放置脚本标签)时,它找不到它。我已经尝试安装“socket.io-client”,但它也没有用,与 socket.io 网站上出现的 CDN 安装相同。
这是我的服务器:
const express = require('express');
const app = express();
const port = 3000;
const exphbs = require('express-handlebars');
const engine = exphbs.engine;
const http = require('http');
const socketio = require('socket.io');
const server = http.createServer(app);
const io = socketio(server);
app.engine('handlebars', engine());
app.set('view engine', 'handlebars');
app.set('views', './views');
app.use(express.static('public')); //Expongo al lado cliente la carpeta "public"
io.on('connection', socket => {
console.log(`Socket ${socket.id} connected`)
})
app.get('/', (req, res) => {
res.render("home");
})
app.get('/Hola', (req, res) => {
res.render("hola");
})
app.listen(port, ()=> console.log(`App listening to port ${port}`));
我把脚本标签放在主布局上:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Card Game</title>
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<h1 id="titulo">Card Game</h1>
{{{body}}}
<script src="/socket.io/socket.io.js"></script>
<script src="/js/main.js"></script>
</body>
</html>
程序在 public 文件夹中找到 main.js 文件没有问题,但似乎找不到 socket.io.js .
Screenshot of the console error that I get when I run the program
如有任何帮助,我们将不胜感激!
问题是您正在创建两个 http 服务器,将 socket.io 和 Express 附加到其中一个,但从未启动那个。另一个只附有快递。
您创建一个 HTTP 服务器并使用 socket.io 附加到它:
const server = http.createServer(app);
const io = socketio(server);
但是,该服务器从未启动,因此它不是 运行。所以,socket.io 不是 运行.
你用这个创建另一个 HTTP 服务器:
app.listen(port, ()=> console.log(`App listening to port ${port}`));
这个已启动,但没有 socket.io 附加到它,因此没有安装任何服务 /socket.io/socket.io.js
,因此浏览器在请求它时得到 404。
要修复,更改这行代码:
app.listen(port, ()=> console.log(`App listening to port ${port}`));
对此:
server.listen(port, ()=> console.log(`App listening to port ${port}`));
作为进一步解释的要点,在 app.listen()
内部,它是这样做的:
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
因此,您可以看到它正在创建另一个不是您附加 socket.io 的 http 服务器。您显然不需要创建另一个 - 您只需要在您已经创建的 http 服务器上调用 .listen()
。
我正在用 Express、Handlebars 和 Socket.IO 做一个个人项目。我很好地设置了 Express 和 Handlebars 部分,但是当我尝试将客户端连接到 socket.io(通过像页面上所说的那样放置脚本标签)时,它找不到它。我已经尝试安装“socket.io-client”,但它也没有用,与 socket.io 网站上出现的 CDN 安装相同。
这是我的服务器:
const express = require('express');
const app = express();
const port = 3000;
const exphbs = require('express-handlebars');
const engine = exphbs.engine;
const http = require('http');
const socketio = require('socket.io');
const server = http.createServer(app);
const io = socketio(server);
app.engine('handlebars', engine());
app.set('view engine', 'handlebars');
app.set('views', './views');
app.use(express.static('public')); //Expongo al lado cliente la carpeta "public"
io.on('connection', socket => {
console.log(`Socket ${socket.id} connected`)
})
app.get('/', (req, res) => {
res.render("home");
})
app.get('/Hola', (req, res) => {
res.render("hola");
})
app.listen(port, ()=> console.log(`App listening to port ${port}`));
我把脚本标签放在主布局上:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Card Game</title>
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<h1 id="titulo">Card Game</h1>
{{{body}}}
<script src="/socket.io/socket.io.js"></script>
<script src="/js/main.js"></script>
</body>
</html>
程序在 public 文件夹中找到 main.js 文件没有问题,但似乎找不到 socket.io.js .
Screenshot of the console error that I get when I run the program
如有任何帮助,我们将不胜感激!
问题是您正在创建两个 http 服务器,将 socket.io 和 Express 附加到其中一个,但从未启动那个。另一个只附有快递。
您创建一个 HTTP 服务器并使用 socket.io 附加到它:
const server = http.createServer(app);
const io = socketio(server);
但是,该服务器从未启动,因此它不是 运行。所以,socket.io 不是 运行.
你用这个创建另一个 HTTP 服务器:
app.listen(port, ()=> console.log(`App listening to port ${port}`));
这个已启动,但没有 socket.io 附加到它,因此没有安装任何服务 /socket.io/socket.io.js
,因此浏览器在请求它时得到 404。
要修复,更改这行代码:
app.listen(port, ()=> console.log(`App listening to port ${port}`));
对此:
server.listen(port, ()=> console.log(`App listening to port ${port}`));
作为进一步解释的要点,在 app.listen()
内部,它是这样做的:
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
因此,您可以看到它正在创建另一个不是您附加 socket.io 的 http 服务器。您显然不需要创建另一个 - 您只需要在您已经创建的 http 服务器上调用 .listen()
。