为啥我不能在 Socket.io http 服务器上使用 express.js 获取方法
Posted
技术标签:
【中文标题】为啥我不能在 Socket.io http 服务器上使用 express.js 获取方法【英文标题】:Why I cannot use express.js get method with Socket.io http server为什么我不能在 Socket.io http 服务器上使用 express.js 获取方法 【发布时间】:2022-01-05 09:09:27 【问题描述】:这是我的代码:
const consts = require('./public/script/consts.js');
const express = require('express');
const app = express();
const server = require('http').createServer(app);
const Server = require('socket.io');
const io = new Server(server);
function io_on_connection(socket)
console.log("a user connected"); // TODO: Emit user connected
socket.on('sendmessage', (message) =>
io.emit("recievemessage", username: "litte_coder", message: message );
);
function app_get_root(req, res)
console.log("index");
res.sendFile(__dirname + '/public/index.html');
function server_listen()
console.log('Server is running...');
/* Socket.io */
io.on('connection', io_on_connection);
//app.use(express.static(__dirname + '/public'));
app.get('/', app_get_root);
server.listen(consts.PORT, server_listen);
当我使用app.use(express.static...)
时,app_get_root
回调不会调用,但我的 index.html 已服务。我的目录结构是这样的:
├── app.js
├── package.json
├── package-lock.json
└── public
├── index.html
├── script
│ ├── consts.js
│ └── index.js
└── style
└── style.css
但如果我的 app_get_root 回调不起作用,它如何为我的 index.html 文件提供服务?
【问题讨论】:
【参考方案1】:我已经运行了它,如果它对我有用,甚至添加 app.use(express.static("public"));
你怎么知道app_get_root没有被调用。
console.log("index") 它打印在节点控制台中,而不是在浏览器中。
【讨论】:
是的,代码也对我有用。 在控制台上调用了 io_on_connection。我看到“用户已连接”。但是当我使用 app.use.... 它不会在控制台上写“索引”。所以它没有被调用。只是来自 io_on_connection 的“用户连接”行(抱歉英语不好)以上是关于为啥我不能在 Socket.io http 服务器上使用 express.js 获取方法的主要内容,如果未能解决你的问题,请参考以下文章