【问题标题】:Load module using node.js require使用 node.js 加载模块
【发布时间】:2015-05-09 10:17:00
【问题描述】:

我正在使用 expressjade 框架构建一个 node.js 应用程序。该应用程序具有标准框架,即它在主目录中的外观:

  • app.js
  • bin
  • npm-debug.log
  • 观看次数
  • node_modules
  • package.json
  • 公开

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

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

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

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

【问题讨论】:

  • 公用文件夹通常用于存放静态文件和样式。在其中包含业务逻辑并不是真正的标准做法。
  • @Craicerjack 感谢您的解释!那我应该在哪里实现业务逻辑呢?
  • @e213n 因为无法以任何方式构建 cmets,所以我使用了一个答案帖子来展示我在项目中使用的示例目录结构
  • 等等。我是否正确假设 x.js 是客户端(浏览器)javascript 文件?

标签: javascript node.js express socket.io


【解决方案1】:

这不是试图回答所提出的问题,而是在评论中向我提出的进一步问题。理想情况下,我会在 cmets 中回答它,但觉得视觉方面可以更好地解释。
我的应用程序中有一个这样的文件夹结构,一个 MVC 类型的结构。 controllers/ 文件夹包含业务逻辑。 models/ 文件夹包含我的模型。 routes 文件夹包含routes/views/ 文件夹包含我的玉模板。

【讨论】:

    【解决方案2】:

    要初始化 socket.io,你需要一些关键的东西,比如 app.js 文件中初始化的服务器变量。 因此,如果您尝试从 app.js 中要求 socket.io 并尝试初始化 socket.io,那么您可能会遇到一些麻烦。 因为在您的情况下,如果没有服务器 var,socket.io 就无法初始化。

    如果您尝试要求 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/#

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2011-08-30
      • 2012-04-05
      • 2021-12-02
      • 1970-01-01
      相关资源
      最近更新 更多