6

Express.js: app.listen vs server.listen - В чем разница?

1

У меня есть, возможно, очень простой вопрос, но я просто не понимаю. В чем разница между созданием приложения с использованием Express.js и запуском приложения, прослушивающего порт 1234, например:

var express = require('express');
var app = express();

//app.configure, app.use и т.д.

app.listen(1234);

и добавлением HTTP-сервера:

var express = require('express');
var http = require('http');

var app = express();
var server = http.createServer(app);

//app.configure, app.use и т.д.

server.listen(1234);

В чем разница? Если я зайду по адресу http://localhost:1234, я получаю одинаковый вывод.

3 ответ(ов)

7

Второй способ (создание HTTP-сервера самостоятельно, вместо того чтобы позволить Express создать его за вас) полезен, если вы хотите повторно использовать HTTP-сервер, например, для запуска socket.io в том же экземпляре HTTP-сервера:

var express = require('express');
var app     = express();
var server  = require('http').createServer(app);
var io      = require('socket.io').listen(server);
...
server.listen(1234);

Однако метод app.listen() также возвращает экземпляр HTTP-сервера, поэтому с небольшими изменениями вы можете достичь аналогичного результата, не создавая HTTP-сервер самостоятельно:

var express   = require('express');
var app       = express();

// app.use/routes/etc...

var server    = app.listen(3033);
var io        = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
  ...
});

Таким образом, если вам нужно использовать socket.io совместно с другими middleware или маршрутами Express, вы можете сэкономить несколько строк кода, используя app.listen().

0

Express — это по сути обертка над модулем http, созданная для удобства разработчиков таким образом, что:

  1. Они могут легко настраивать промежуточные обработчики для ответов на HTTP-запросы с помощью Express.
  2. Они могут динамически рендерить HTML-страницы, передавая аргументы в шаблоны, используя Express.
  3. Они также могут просто определять маршрутизацию, используя Express.
0

Разница между использованием приложения и прослушиванием HTTP-сервера заключается в том, что для настройки HTTPS-сервера требуется другой подход.

Чтобы настроить HTTPS-сервер, вам нужно использовать следующий код:

var https = require('https');
var server = https.createServer(app).listen(config.port, function() {
    console.log('Https App started');
});

Приложение на базе Express по умолчанию создает только HTTP-сервер, и вы не можете настроить его для работы по протоколу HTTPS прямо в Express. Поэтому потребуется использовать команду для создания HTTPS-сервера:

var express = require('express');
var app = express();
app.listen(1234);

Обратите внимание, что при использовании простого app.listen() вы получите только HTTP-сервер. Для обеспечения безопасности через HTTPS обязательно используйте соответствующий код для настройки.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь