node.js - 如何设置 Socket.io 以使用 Express NodeJS 监听单独的页面
问题描述
我有下一个server.js
文件结构,其中有两页,只有最后/chat
一页我需要通过 Socket.io 库实现事件侦听器:
'use strict'
const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const index = require('./routes/index');
const chat = require('./routes/chat');
app.use('/', index);
app.use('/chat', chat);
// sockets.io code part start...
app.use((req, res, next) => {
res.locals['socketio'] = io;
next();
});
// sockets.io code part finish...
const port = process.env.API_PORT || 8989;
server.listen(port, () => {
console.log(`Server running on port ${port}`);
});
我从这个结构中得到了什么?我的听都是通过andserver
进入网站的,这是错误的。所以,我认为我需要实现我的部分代码来响应处理特定路线中的事件......localhost:3000
localhost:3000/chat
sockets.io
/chat
chat.js
我的路线系统中有下一个文件:
const express = require('express');
const router = express.Router();
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now());
next();
});
router.route('/chat')
.get((req, res) => {
let messages = [];
let userCounter = 0;
let users = [];
const io = res.locals['socketio'];
io.on('connect', (socket) => {
console.log('Connection established!');
socket.on('new user', (message) => {
userCounter++;
users.push(userCounter)
console.log('New user is in! Count of users online:', users)
});
socket.emit('new connect', messages);
socket.on('message data', (message) => {
console.log(message);
messages.push(message);
io.emit('New message:', message);
});
});
res.json('Hello on the Chatpage!');
});
module.exports = router;
在我的情况下,如何仅在/chat
没有全局调用文件的页面上实现 sockets.io socket.io library
,server
或者这是不可能的?我需要任何帮助...
谢谢!
解决方案
问题是您必须将HTTP连接升级为websocket连接,所以您仍然需要在主页面上使用socket.io ...
推荐阅读
- mongodb - Mongodb递归查询成树状结构
- javascript - 如何为每个按钮单击返回一次函数的结果(数组),而不是连续推送到另一个数组?
- python - 使用 flask_paginate (pymongo) 实现分页
- c# - 从一个模板创建多个网页实例?
- javascript - 切换类导致元素的内部 html 消失
- java - Cometd 客户端不与 cometD 服务器握手
- c - 线程无法获取锁,即使没有其他人使用它们
- python - 在 python 中导入 csv 模块时出错
- c++11 - 如何修复文件中单个条目的双重输出?
- go - golang 网络服务器接受 cookie,尽管它们已过期