IDONTSUDO
@IDONTSUDO
ЧСВ программистов идет в комплекте с первой IDE.

Express + Soket.io передать IO в роутер?

Насколько я знаю Express строится на промежуточных обработчиках. Но почему то я не могу получить доступ к io в своём обработчике.
Структура моего приложения
5dea1128ac203888856690.png

main.js
const express = require('express')
const http = require('http')
const socketIO = require('socket.io')
const morgan = require('morgan')
const bodyParser = require('body-parser')

const port = 4001

const app = express()

const server = http.createServer(app)

const io = socketIO(server)
const Routes = require('./router/test.js')
// console.log(io) здесь я могу получить доступ к io переменной
app.use(function(req,res,next){
// console.log(io) а в промежуточном обработчике не могу
    req.io = io;
    next();
});


app.use(morgan("dev"))
app.use(bodyParser.json())
app.use("/", Routes)



server.listen(port, () => console.log(`Listening on port ${port}`))


test.router.js
const express = require("express")
const { test } = require("../controllers/test")

const router = express.Router({mergeParams: true});

router.get('/',test)

module.exports = router

test.controller.js

exports.test = async (req,res) =>{
    console.log(200)
}


Как мне сделать так что бы io соединение было доступно на уровне всего приложения?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
hzzzzl
@hzzzzl
должно работать, а как ты знаешь, что
// console.log(io) а в промежуточном обработчике не могу
?

в test.controller.js тоже req.io === undefined?

буквально вчера так и писал

const express = require('express')
const app = express()
const server = require('http').createServer(app)
const io = require('socket.io')(server)

app.use('/', function(request, response, next) {
  request.io = io
  next()
})

............

router.post('/', async (req, res) => {
    const { socketId } = req.body
    req.io.to(socketId).emit('fetchstart')   // всё ок
.....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы