Двойные параметры с require: var io = require ('socket.io') (http);
Я новичок в node и JS и работал с сокетом.пример чата ввода-вывода (http://socket.io/get-started/chat/). Я наткнулся на этот код на сервере:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
Я посмотрел на другие учебники и никогда не видел двойных скобок после require раньше. Что делает (http)
часть делать? Это параметр для require, doest он меняет тип или что-то еще?
спасибо!
3 ответов
в 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.Сервер(приложение)
это загружает серверный модуль с экспресс-данными, которые вы вызвали выше (вид строки конструктора), и помещает его в httpServer var.
разница выше заключается в том, что вместо двух шагов они конденсируют его в один, так что http имеет серверный модуль внутри него вместо всей библиотеки http. Это может быть полезно, если вы хотите использовать только эта конкретная часть библиотеки http.
Nodejs позволяет назначить объект / функцию экспортированному модулю с помощью оператора module.exports = something
. Таким образом, каждый из этих операторов импортирует библиотеку, а затем запускает функцию, назначенную тому, что было экспортировано.
например, здесь является исходным кодом для express, где они экспортируют статью, в которой они идут в немного более подробно.