Socket.io with Node.js returns 尝试发出时在路由文件中未定义
Socket.io with Node.js returns undefined in route file when trying to emit
我曾尝试使用 socket.io 从路由文件中发出数据,但在我调用该路由时它正在崩溃。
获取引号时出错无法读取未定义的属性(读取 'emit')
类型错误:无法读取未定义的属性(读取 'emit')
有人知道为什么会这样吗?
谢谢。
app.ts
const express = require('express');
const io = require("socket.io");
const indexRouter = require('./routes');
const quotesRouter = require('./routes/quotes');
const app = express();
const listener = app.listen(3001, () => console.log("Listening..."));
const socketsManager = io(listener, {cors: {origin: "*"}});
socketsManager.sockets.on("connection", (socket: any) => {
console.log("One client has been connected. Total clients: " + socketsManager.engine.clientsCount);
// Listen to disconnect event from the connected client:
socket.on("disconnect", () => {
console.log("A specific client has been disconnected. Total clients: " + (socketsManager.engine.clientsCount - 1));
});
socket.on("getQuotes", (quotes: Quote[]) => {
socket.emit('getQuotes', quotes);
});
});
app.set('socketio', io);
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use('/', indexRouter);
app.use('/quotes', quotesRouter);
module.exports = app;
quotes.ts(路由文件)
import {NextFunction, Request, Response} from 'express';
const app = require('../app');
const express = require('express');
const router = express.Router();
const quotes = require('../services/quotes');
router.get('/', async function (req: Request, res: Response, next: NextFunction) {
try {
let io = req.app.get('socketio');
io.sockets.emit('getQuotes',await quotes.getMultiple(req.query.page));
// res.status(200).json(await quotes.getMultiple(req.query.page));
} catch (err: any) {
console.error(`Error while getting quotes `, err.message);
next(err);
}
});
module.exports = router;
您似乎为 socketio 分配了错误的值。您需要 socketsManager
而不是分配 io
,这是已初始化的套接字实例
const socketsManager = io(listener, {cors: {origin: "*"}});
所以,像这样更新您的 socketio
变量定义,
app.set('socketio', socketsManager);
我曾尝试使用 socket.io 从路由文件中发出数据,但在我调用该路由时它正在崩溃。
获取引号时出错无法读取未定义的属性(读取 'emit') 类型错误:无法读取未定义的属性(读取 'emit')
有人知道为什么会这样吗?
谢谢。
app.ts
const express = require('express');
const io = require("socket.io");
const indexRouter = require('./routes');
const quotesRouter = require('./routes/quotes');
const app = express();
const listener = app.listen(3001, () => console.log("Listening..."));
const socketsManager = io(listener, {cors: {origin: "*"}});
socketsManager.sockets.on("connection", (socket: any) => {
console.log("One client has been connected. Total clients: " + socketsManager.engine.clientsCount);
// Listen to disconnect event from the connected client:
socket.on("disconnect", () => {
console.log("A specific client has been disconnected. Total clients: " + (socketsManager.engine.clientsCount - 1));
});
socket.on("getQuotes", (quotes: Quote[]) => {
socket.emit('getQuotes', quotes);
});
});
app.set('socketio', io);
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use('/', indexRouter);
app.use('/quotes', quotesRouter);
module.exports = app;
quotes.ts(路由文件)
import {NextFunction, Request, Response} from 'express';
const app = require('../app');
const express = require('express');
const router = express.Router();
const quotes = require('../services/quotes');
router.get('/', async function (req: Request, res: Response, next: NextFunction) {
try {
let io = req.app.get('socketio');
io.sockets.emit('getQuotes',await quotes.getMultiple(req.query.page));
// res.status(200).json(await quotes.getMultiple(req.query.page));
} catch (err: any) {
console.error(`Error while getting quotes `, err.message);
next(err);
}
});
module.exports = router;
您似乎为 socketio 分配了错误的值。您需要 socketsManager
而不是分配 io
,这是已初始化的套接字实例
const socketsManager = io(listener, {cors: {origin: "*"}});
所以,像这样更新您的 socketio
变量定义,
app.set('socketio', socketsManager);