带require的双参数:var io = require('socket.io')(http);
Double parameters with require: var io = require('socket.io')(http);
我是node和JS的新手,正在研究套接字。IO聊天示例(http://socket.io/get-started/chat/)。我在服务器上看到了这段代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
我看过其他教程,从来没有见过双括号之后的要求。(http)
是做什么的?它是require的参数吗,它改变类型了吗,还是别的什么?
谢谢!
在JavaScript中,函数是一等公民。这意味着它可以由另一个函数返回。
考虑下面的简单示例来理解这一点:
var sum = function(a) {
return function(b) {
return a + b;
}
}
sum(3)(2); //5
//...or...
var func = sum(3);
func(2); //5
在您的示例中,require('socket.io')
返回另一个函数,该函数以http
对象作为参数立即调用。
如果您有一个库http
并且它有一个导出模块server
,则展开
假设我们把这行分开:
var http = require('http').Server(app);
分成两行:
var HTTP = require(' HTTP ')
导入"http"模块库作为JSON对象放入http变量。这个模块库有一堆模块,你现在可以通过http变量调用它们。
httpServer = http.Server(app)
这将用上面调用的express数据加载Server模块(Kind line a constructor),并将其放入httpServer变量中。
上面的不同之处在于,他们将这两个步骤压缩成一个步骤,因此http内部有Server模块,而不是整个http库。如果您只想使用http库的特定部分,这可能很有用。
Nodejs允许您使用语句module.exports = something
将对象/函数分配给导出的模块。因此,这些语句中的每一条都导入了一个库,然后运行分配给导出库的函数。
例如,这里是express导出createApplication
函数的源代码。
这里有一篇更详细的文章
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 如何使用Socket.io将命令从客户端发送到服务器
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- Socket.IO未定义变量
- Socket.io on Mozilla Rhino
- 如何在Ionic2测试版中包含Ionic.io服务
- 当使用extern和目标JavaScript时,我如何强制Haxe编译器使用require语句
- 在gump和nodejs中使用Typescript时,未定义对require和exports的引用
- socket.io发射三次
- Typescript导入导出的类会发出require(..),从而导致浏览器错误
- AngularJS$q承诺使用socket.io
- 将require('..')与变量一起使用与在webpack中使用字符串相比
- Atom.io中AngularJS的方法完成
- 如何知道使用socket.io订阅/取消订阅频道
- 可以't连接客户端和服务器import.io
- 错误:require.paths已删除.当运行node.js&socket.io
- 带有require.js async和io的Socket.io未定义
- 带require的双参数:var io = require('socket.io')(http);