使用 node.js 加载模块要求
Load module using node.js require
我正在使用 express 和 jade 构建一个 node.js 应用程序构架。该应用程序具有标准框架,这就是主目录的外观:
- app.js
- bin
- npm-debug.log
- 观看次数
- node_modules
- package.json
- public
当我尝试在 js 文件(称为 x.js) 在 public 目录中。这就是我实现一些与用户操作事件处理紧密相关的逻辑的地方。所以换句话说,当有人点击按钮 'connect' 时,我想使用 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。
要初始化 socket.io 你需要一些关键的东西,比如在 app.js 文件中初始化的服务器变量。
因此,如果您尝试从 app.js 中请求 socket.io 并尝试初始化 socket.io,那么您可能会遇到一些麻烦。
因为 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。
这不是试图回答所提出的问题,而是在评论中向我提出的进一步问题。理想情况下,我会在评论中回答它,但感觉是视觉方面的可以解释得更好。
我的应用程序中有一个这样的文件夹结构,一个 MVC 类型的结构。 controllers/
文件夹包含业务逻辑。 models/
文件夹包含我的模型。 routes 文件夹包含 routes/
,views/
文件夹包含我的 jade 模板。
我正在使用 express 和 jade 构建一个 node.js 应用程序构架。该应用程序具有标准框架,这就是主目录的外观:
- app.js
- bin
- npm-debug.log
- 观看次数
- node_modules
- package.json
- public
当我尝试在 js 文件(称为 x.js) 在 public 目录中。这就是我实现一些与用户操作事件处理紧密相关的逻辑的地方。所以换句话说,当有人点击按钮 'connect' 时,我想使用 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。
要初始化 socket.io 你需要一些关键的东西,比如在 app.js 文件中初始化的服务器变量。 因此,如果您尝试从 app.js 中请求 socket.io 并尝试初始化 socket.io,那么您可能会遇到一些麻烦。 因为 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。
这不是试图回答所提出的问题,而是在评论中向我提出的进一步问题。理想情况下,我会在评论中回答它,但感觉是视觉方面的可以解释得更好。
我的应用程序中有一个这样的文件夹结构,一个 MVC 类型的结构。 controllers/
文件夹包含业务逻辑。 models/
文件夹包含我的模型。 routes 文件夹包含 routes/
,views/
文件夹包含我的 jade 模板。