【问题标题】:Beginner confused about module structure in Express and socket.io初学者对 Express 和 socket.io 中的模块结构感到困惑
【发布时间】:2015-12-01 03:47:18
【问题描述】:

全部:

我是 Node.js 新手,在学习如何将 Socket.io 集成到 Express.js 中时,有一个关于模块化的问题让我非常困惑:

我使用默认 Express.js项目结构,主要js文件涉及我的困惑是:

app.js: 定义请求处理程序并使用 module.exports = app;作为一个模块。

bin/www:需要app.js,设置和配置http服务器。

一切似乎都模块化了。

但是当涉及到 Socket.io 集成时,这个结构开始让我感到困惑:

来自 Socket.io 文档:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(80);

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

由于 socket.io 需要服务器变量,所以我认为这段代码应该在 www 文件中,但是我也想将 io 事件处理部分模块化为一个模块,但我不知道如何将该 io 变量导出到www,因为它需要来自 www 的变量服务器。

我想知道:这是否意味着我必须将所有 socketio 事件处理代码保留在 www 文件中?谁能给我一些代码来展示如何模块化?

PS:感谢您的通过并对此投反对票,这证明这是一个入门级问题或毫无价值,但是,请在您的否决票中留下您的答案,因为这对入门级初学者非常重要像我一样。

谢谢

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    socket 代码的组织不一定是直观的,但您可以将其视为类似于事物的 http 方面以及通常向路由提供函数的方式。

    请注意,您只是为“io.on”提供了一个函数。所以,你可以做这样的事情。在一个单独的文件中为您的套接字函数创建一个模块...

    // File named socket_funcs.js
    module.exports.connection = function (socket) {
        socket.emit('news', { hello: 'world' });
        socket.on('my other event', function (data) {
        console.log(data);
    });
    

    然后在你的 app.js 文件中你可以这样做...

    var app = require('express')();
    var server = require('http').Server(app);
    var io = require('socket.io')(server);
    var sf = require('./socket_funcs.js');
    
    server.listen(80);
    
    app.get('/', function (req, res) {
        res.sendfile(__dirname + '/index.html');
    });
    
    io.on('connection', sf.connection);
    

    我没有否决你的问题。对于初学者来说,这似乎是一个足够合适的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-05
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 2022-01-04
      • 2012-08-13
      • 1970-01-01
      相关资源
      最近更新 更多