Как запустить Socket.io поверх конечной точки Nodejs express - PullRequest
0 голосов
/ 14 июля 2020

Я хотел бы сохранить все на одном сервере, поэтому я хотел бы реализовать сервер socket.io, который обрабатывает соединения от моих продуктов поверх моего веб-сервера аутентификации.

В настоящее время У меня есть функция промежуточного программного обеспечения, которая проверяет, действителен ли данный токен аутентификации:

verifyToken. js:

const jwt = require('jsonwebtoken');

module.exports = function(req, res, next){

// Check if auth-token is avaliable
const token = req.header('auth-token');
if(!token) return res.status(401).send('Access denied');

try{
    const verified = jwt.verify(token, "secret");
    req.user = verified;
    next()
}catch (err){
    // Invalid token - not logged in 
    res.status(201).send('Access denied');
    }
}

Я могу использовать это промежуточное ПО на любой конечной точке, которая должна быть Доступно только зарегистрированному действующему пользователю:

const router = require('express').Router();
const verify = require('../authentication_routes/verifyToken');

router.get('/', verify, (req,res) => {
    res.send('logged in');
});

module.exports = router;

Как мне реализовать сервер socket.io в этом маршрутизаторе, само приложение NodeJS запускается с порта 3000 и идентификатора, как любой, кто попадает в конечную точку который идет на этот маршрутизатор, подключается к серверу socket.io. Я пробовал это:

    const router = require('express').Router();
    const io = require('socket.io')(3000);
    const verify = require('../authentication_routes/verifyToken');

router.get('/', verify, (req,res) => {
    io.on('connection', socket => {
        socket.emit('connection-established', 'Connected');
    });
});

module.exports = router;

Но это явно не работает, поскольку порт 3000 уже используется сервером NodeJS.

Как бы я go об этом , Я знаю, что есть вопросы, которые (в некоторой степени) отвечают на этот вопрос, но это не включает тот факт, что я использую функцию промежуточного программного обеспечения на защищенной конечной точке?

1 Ответ

1 голос
/ 15 июля 2020

Когда вы получаете / конечную точку, если пользователь аутентифицирован, она должна отображать HTML страницу пользователю (интерфейс чата). Ваш код должен быть таким

  const router = require('express').Router();
  const server = require("http").Server(router)
  const io = require("socket.io")(server)
  port = process.env.PORT || 3000
  server.listen(port)
  const verify = require('../authentication_routes/verifyToken');

  router.get('/', verify, (req,res) => {
      io.on('connection', socket => {
        socket.emit('connection-established', 'Connected');
    });
  });


  

  module.exports = router;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...