1. ホーム
  2. node.js

[解決済み] Express.js - app.listen vs server.listen

2022-03-17 15:33:26

質問

これは非常に基本的な質問かもしれませんが、私は単にそれを得ることはありません。を使用してアプリを作成することの違いは何ですか? Express.js を起動し、例えばポート1234でリスニングしているアプリを起動します。

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

//app.configure, app.use etc

app.listen(1234);

を追加し、httpサーバーを追加します。

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

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

//app.configure, app.use etc

server.listen(1234);

何が違うの?
に移動した場合 http://localhost:1234 このように、同じ出力が得られます。

解決方法は?

2 番目の方法(Express に HTTP サーバを作成させるのではなく、自分で作成する)は、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) {
  ...
});