模块化node.js / socket.io / express应用程序的最佳方法
我正在使用Node.JS正确创build一个使用Express和Socket.io的应用程序。 随着时间的推移,处理一个文件变得越来越困难,我正在移动某些东西,我知道如何但是想知道如何做到这一点的最佳方法。
我有一个私人领域的构造类似于:
privateArea.js
function privateArea(props) { this.id = props.id; this.name = props.name; this.users = []; } privateArea.prototype.addUser = function(socketId) { this.users.push(socketId); }; module.exports = privateArea;
我想这也有访问的socket.io
variables设置为在一个单独的sockets.js
文件中使用,可以通过主app.js
和一个单独的文件express.js
所以我想要的结构如下:
project | app.js - joins it all together | express.js - initialises and manages all express routing | privateArea.js - constructor for private areas - must be able to reference socket.io | sockets.js - initialises and manages all socket.io sockets and events
任何帮助/例子将非常感激。
谢谢
我使用socket.io,并在我的项目中经常expression,并且开发了一个模板,使事情变得简单。 如果套接字连接由于某种原因而下降,或者无法build立套接字连接,我喜欢进行故障切换。 所以我创build了http通道以及套接字通道。 这是一个基本的模块模板:
module.exports = function () { var exported = {}; var someFunction = function (done) { //.. code here..// if (typeof done === "function") { done(null, true); } }; // export the function exported.someFunction = someFunction; var apicalls = function (app) { app.get("/module/someFunction", function (req, res) { res.header("Content-Type", "application/json"); someFunction(function (err, response) { if (err) return res.send(JSON.stringify(err)); res.send(JSON.stringify(response)); }); }); }; exported.apicalls = apicalls; var socketcalls = function (io) { io.on("connection", function (socket) { socket.on('module-someFunction', function () { someFunction(function (err, response) { if (err) return socket.emit('module-someFunction', err); socket.emit('module-someFunction', response); }); }); }); }; exported.socketcalls = socketcalls; return exported; }
所以要使用这个,我首先需要将模块包含在我的app.js文件中,如下所示:
var mymod = require('./myModule.js');
然后我可以启用从HTTP和WebSocket这样的服务的访问:
mymod.apicalls(app); // passing express to the module mymod.socketcalls(io); // passing socket.io to the module
最后,从前端,我可以检查,如果我有一个套接字连接,如果是这样,我使用套接字发出“模块一些function”。 如果我没有套接字连接,前端将执行一个AJAX调用,而不是“/ module / someFunction”,这将在服务器端实现与我使用套接字连接相同的function。
作为一个额外的好处,如果我需要利用服务器内的function,我也可以做到这一点,因为该function是出口。 这看起来像这样:
mymod.someFunction(function (err, response) { // ... handle result here ... // });
- $ http获得的返回值不同于$ resource get
- Twilio sendMessage不发送到数组中的所有值
- io.connect(); 没有初始化,node.js
- Node.JS使用Sails.JS框架 – 护照:没有战略注册名称:Facebook
- express-js服务器中的HTTPS SSL损坏(net :: ERR_CERT_COMMON_NAME_INVALID)
- Knex:错误池2 – 错误:连接ECONNREFUSED
- 浏览器不发回cookies,但curl
- RethinkDB和Node.js / Express – 为并行查询打开多个连接?
- Node Express中的自定义URL