web-dev-qa-db-ja.com

express.jsへのSocket.ioエラーフック

Socket.ioとexpress.jsを一緒にフックしようとしています:

_var socket = require('./socket_chat/socket.js');

var express = require('express'),
    app = module.exports.app = express();

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

    app.use(express.static(__dirname + '/app'));

io.sockets.on('connection', socket);
_

行:var io = require('socket.io').listen(app);エラーが発生しています:

_Error: You are trying to attach socket.io to an expressrequest handler function. Please pass a http.Server instance.
_

SO/googleにはこのエラーについて何もないようです...

26
alyx

httpモジュールを使用する必要があります。

var http = require('http');
var express = require('express'),
    app = module.exports.app = express();

var server = http.createServer(app);
var io = require('socket.io').listen(server);  //pass a http.Server instance
server.listen(80);  //listen on port 80

//now you can use app and io

ドキュメントで詳細を確認できます: http://socket.io/docs/#using-with-express-3/4

64
Oleg

httpモジュールを使用せずに実行できます

app.listenは、socket.ioに使用できるサーバーインスタンスを返します

const express = require('express');
const app = express();
const server = app.listen(port, () => {
    console.log("Listening on port: " + port);
});
const io = require('socket.io')(server);
5
Tagada