带有 socket.io 和 express 的 Websocket

Posted

技术标签:

【中文标题】带有 socket.io 和 express 的 Websocket【英文标题】:Websocket with socket.io and express 【发布时间】:2016-10-20 21:16:06 【问题描述】:

我正在尝试将 socket.io 与 express 一起使用,我使用了 express 生成器。我无法从控制台查看任何日志。

在写这篇文章之前,我关注了 Gabriel 投票最多的解决方案 奥特洛克 Using socket.io in Express 4 and express-generator's /bin/www

我的代码:

app.js

var express = require('express');
var socket = require('socket.io');
var app = express();
var io = socket();
app.io = io;
// var for routes
var index = require('./routes/index')(io);
// Routes
app.use('/', index);

module.exports = app;

bin/www

var server = http.createServer(app);
var io = app.io;
io.attach(server);

routes/index.js

var passport = require('passport');
/* GET home page. */
module.exports = function(io)
  var app = require('express');
  var router = app.Router();
  var controller = require('../controllers/indexController');
  router.get('/', controller.plain);
  /*socket*/
  io.on('connection', function(socket)
    console.log('conectado desde index.js');
    console.log('conectado desde index.js');
    console.log('conectado desde index.js');
  );
  return router;

controllers/indexController.js

使用 indexController.js 中的完整内容进行编辑

var Account = require('../models/accounts');
var Fav = require('../models/favs');
var Project = require('../models/projects');
var Message = require('../models/messages');
var mongoose = require('mongoose');

module.exports = 
    plain : function (req, res) 
      Project.find(function(err, projects)
        Account.find(function(err, userOwner)
          if(req.user)
            Fav.find('favUserId': req.user.id,function(err, favs)
              res.render('index',
                title: "myAplication",
                user: req.user,
                listProjects : projects,
                listUsers : userOwner,
                listFavs : favs
              );
            );
          else
            res.render('index',
              title: "myAplication",
              listProjects : projects,
              listUsers : userOwner,
            );
        );
      );

    ,
;

【问题讨论】:

socket.on('connection' ... event never fired nodejs + express + socket.io的可能重复 不一样,查看链接中的代码,我尝试了一些解决方案,但也不起作用。 您是否尝试将事件重命名为io.on('connect', ... 是的,没有任何反应。 如何启动您的应用程序? node app.js? 【参考方案1】:

你可以这样做:

//in app.js
app.set('socketio', io);

//in any route
app.get("/", (req, res) => 
    const io = req.app.get('socketio');
)

【讨论】:

以上是关于带有 socket.io 和 express 的 Websocket的主要内容,如果未能解决你的问题,请参考以下文章

无法从带有 Socket.IO 的 cookie 中获取 Express 会话 ID

带有 express 的 socket.io 中的 SSL:缺少 PFX 或证书 + 私钥。

带有快递的socket.io

ExpressJS - 带有路由分离的 Socket.IO

带有 Node.js 的 Socket.io

Angular 6 和 Socket.IO - Socket.On 不工作