簡體   English   中英

嘗試發出時,帶有 Node.js 的 Socket.io 在路由文件中返回未定義

[英]Socket.io with Node.js returns undefined in route file when trying to emit

我嘗試使用 socket.io 從路由文件發出數據,當我調用路由時它會崩潰。

獲取引號時出錯無法讀取未定義的屬性(讀取“發射”)類型錯誤:無法讀取未定義的屬性(讀取“發射”)

有誰知道為什么會這樣?

謝謝。

應用程序.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;

quote.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分配了錯誤的值。 而不是分配io ,您需要socketsManager這是初始化的套接字實例

const socketsManager = io(listener, {cors: {origin: "*"}});

所以,像這樣更新你的socketio變量定義,

app.set('socketio', socketsManager);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM