javascript - 初学者对 Express 和 socket.io 中的模块结构感到困惑

标签 javascript node.js sockets socket.io

我使用default 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 文件中?谁能给我一些代码来展示如何对其进行模块化?

最佳答案

套接字代码的组织不一定直观,但您可以将其视为类似于事物的 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);

关于javascript - 初学者对 Express 和 socket.io 中的模块结构感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32407300/

相关文章:

c - 通过套接字传输时二进制文件被损坏

javascript - 在 Javascript 中 chop 一个字符串,混淆最后两个测试字符串

javascript - 使用 JavaScript/Jquery 在 Ruby 中显示具有相同 id/class 的表单

javascript - 使用文本区域创建 jQuery 插件时出现问题

javascript - 如何在onsen ui的pushpage方法中传递多个值

javascript - Discord.js 无法读取未定义的属性 'fetch'

javascript - 创建单页 Web 应用程序作为网站的一部分

来自服务器端的 C++ 套接字主机名

c# - 使用 recieveFrom 获取多播数据包的源 IP

node.js - 经过身份验证的用户的 Sails.js 单个实例