Двойные параметры с 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);

в две строки:

  1. var http = require ('http')

    импортирует библиотеку модулей "http" в качестве объекта JSON в переменную http. Эта библиотека модулей имеет кучу модулей, к которым вы можете получить доступ, вызвав их через http Вар.

  2. httpServer = http.Сервер(приложение)

    это загружает серверный модуль с экспресс-данными, которые вы вызвали выше (вид строки конструктора), и помещает его в httpServer var.

разница выше заключается в том, что вместо двух шагов они конденсируют его в один, так что http имеет серверный модуль внутри него вместо всей библиотеки http. Это может быть полезно, если вы хотите использовать только эта конкретная часть библиотеки http.


Nodejs позволяет назначить объект / функцию экспортированному модулю с помощью оператора module.exports = something. Таким образом, каждый из этих операторов импортирует библиотеку, а затем запускает функцию, назначенную тому, что было экспортировано.

например, здесь является исходным кодом для express, где они экспортируют статью, в которой они идут в немного более подробно.