使用node.js加载模块需要

时间:2015-05-09 10:17:00

标签: javascript node.js express socket.io

我正在使用 express jade 框架构建 node.js 应用。该应用程序具有标准骨架,它是主目录的外观:

  • app.js
  • NPM-的debug.log
  • 视图
  • node_modules
  • 的package.json
  • 公共

当我尝试在 js 文件(称为 x.js )中加载 socket.io 模块时,会出现问题 public 目录。这就是我实现了一些与用户操作事件处理紧密相关的逻辑。换句话说,当有人点击“connect”按钮时,我想使用 socket.io 建立连接。问题是,当我添加这一行

var socket_io = require('socket.io');在x.js x.js 位于/ public 目录中)

整个功能突然停止工作,我想是因为虽然在 x.js var socket_io ,但模块没有加载>文件。如果我将行 var socket_io = require('socket.io'); 添加到 app.js ,一切正常。我调查了SO question,但没有成功。 有人可以解释为什么会发生这种情况以及我做错了什么?

编辑:只是为了澄清我已将'socket.io'添加到package.json文件中。还使用 npm install(-g)socket.io 命令在全局和本地安装 socket.io

2 个答案:

答案 0 :(得分:3)

这不是试图回答所提出的问题,而是在文章中向我提出了另一个问题。理想情况下,我会在评论中回答这个问题,但感觉视觉方面可以更好地解释。<登记/> folder structure
我的应用程序中有一个像这样的文件夹结构,MVC类型结构。 controllers/文件夹包含业务逻辑。 models/文件夹包含我的模型。 routes文件夹包含routes/views/文件夹包含我的jade模板。

答案 1 :(得分:2)

要初始化socket.io,您需要一些关键的东西,比如app.js文件中init的服务器var。 所以,如果你试图从app.js中要求socket.io并尝试初始化socket.io,那么你可能会有一些麻烦。 因为socket.io不能在没有服务器var的情况下初始化。

如果您尝试要求socket.io而不是初始化它。我想你不会有问题。因此,请尝试在socket.io文档中了解与Express相关的部分:http://socket.io/docs/#

然后你可以尝试将npm模块用于express和socket.io:http://express-io.org/

或者你可以处理socket.of()方法:http://socket.io/docs/rooms-and-namespaces/#

无论如何,你应该使用服务器var初始化socket.io。因此,您可以使模块管理socket.io行为,定义一些方法等。为此,您可以将socket.io传递给路径文件的参数。见这里:Use socket.io inside a express routes file 然后,该逻辑允许您在应用程序的任何位置使用socket.io。