繁体   English   中英

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

[英]Beginner confused about module structure in Express and socket.io

所有:

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

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

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

bin / www: require 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:感谢你过去并给予了一次投票,这证明这是一个入门级问题或者毫无价值,但是,请用你的投票留下你的答案,因为这对像我这样的入门级初学者来说非常重要。

谢谢

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

我没有投票给你的问题。 这对初学者来说似乎是一个恰当的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM