Express.js: app.listen vs server.listen - В чем разница?
У меня есть, возможно, очень простой вопрос, но я просто не понимаю. В чем разница между созданием приложения с использованием 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 ответ(ов)
Второй способ (создание 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()
.
Express — это по сути обертка над модулем http, созданная для удобства разработчиков таким образом, что:
- Они могут легко настраивать промежуточные обработчики для ответов на HTTP-запросы с помощью Express.
- Они могут динамически рендерить HTML-страницы, передавая аргументы в шаблоны, используя Express.
- Они также могут просто определять маршрутизацию, используя Express.
Разница между использованием приложения и прослушиванием 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 обязательно используйте соответствующий код для настройки.
Запись в файлы в Node.js
Использование Node.js в качестве простого веб-сервера
Как получить переменные GET (строки запроса) в Express.js на Node.js?
Как получить параметры GET после "?" в Express?
Ошибка: запрос слишком велик