为啥我不能在 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 获取方法的主要内容,如果未能解决你的问题,请参考以下文章

为啥没有调用android端的socket.io监听器?

为啥重新连接成功时socket.io客户端会发送离线消息?

为啥我的 socket.io 视频聊天无法在 heroku 上运行?

socket.io websocket

没有http服务器的Socket.IO?

socket.io:为啥这个广播语句不起作用?