Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Nodejs Socket.io未连接_Node.js_Express_Socket.io - Fatal编程技术网

Node.js Nodejs Socket.io未连接

Node.js Nodejs Socket.io未连接,node.js,express,socket.io,Node.js,Express,Socket.io,我正在连接应用程序中的套接字,但配置不匹配,因为哪个套接字未连接。有什么问题吗?我指的是“使用Express掌握Web应用程序开发”的结构 app.js var express = require('express'); var app = express(); var morgan = require('morgan'); //HTTP request logger middleware for node.js var flash = require('connect-flash'); var

我正在连接应用程序中的套接字,但配置不匹配,因为哪个套接字未连接。有什么问题吗?我指的是“使用Express掌握Web应用程序开发”的结构

app.js

var express = require('express');
var app = express();
var morgan = require('morgan'); //HTTP request logger middleware for node.js
var flash = require('connect-flash');
var multiparty = require('connect-multiparty');
var cookieParser = require('cookie-parser');
var cookieSession = require('express-session');
var bodyParser = require('body-parser'); //Node.js body parsing middleware
var methodOverride = require('method-override');
var errorHandler = require('errorhandler');
var config = require('./config.js');
var passport = require('passport');
var fs = require('fs');
var sessionStore = new cookieSession.MemoryStore();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);

app.set('view engine', 'jade');
app.set('views', __dirname + '/views');

morgan.token('id', function getId(req) {return req.id })

var accessLogStream = fs.createWriteStream(__dirname + '/log/systemAccessWithToken.log', {flags: 'a'})

app.use(assignId)
app.use(morgan(':id :method :url :response-time', {stream: accessLogStream}))

function assignId(req, res, next) {
    next()
}

app.use(bodyParser.json()); //middleware that only parses json

app.use(bodyParser.urlencoded({extended: true}));

app.use(methodOverride(function(req, res) {
    if (req.body && typeof req.body === 'object' && '_method' in req.body) {
        var method = req.body._method;
        delete req.body._method;
        return method;
    }
}));

app.use(cookieParser());
app.use(cookieSession({
    store: sessionStore,
    secret: config.sessionSecret,
    cookie: {maxAge: config.sessionMaxAge}
}));
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash());

if (app.get('env') === 'development') {
    app.use(errorHandler());
}
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.set('Access-Control-Allow-Methods', 'GET, POST');
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
});

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

require('./app/passport')(passport); // pass passport for configuration
var socketcon = require('./app/mainSocket.js');
socketcon.socketconfig(app, io, sessionStore, cookieParser);

require('./routes/controller.js')(app, passport); // load our routes and pass

server.listen(config.port);
var modules = require('../externalModules.js');
var dbConnection = modules.dbConnection;
var cryptography = modules.cryptography;

var onlineUsers = {};
var onlineUsersSocketid = {};

exports.socketconfig = function(app, io, sessionStore, cookieParser) {
    io.set('authorization', function(data, callback) {
        if (!data.headers.cookie) {
            return callback('No cookie transmitted.', false);
        }

        cookieParser(data, {}, function(parseErr) {
            if (parseErr) {
                return callback('Error parsing cookies.', false);
            }

            var sidCookie = (data.secureCookies && data.secureCookies['myuser.sid']) || (data.signedCookies && data.signedCookies['myuser.sid']) || (data.cookies && data.cookies['myuser.sid']);

            sessionStore.load(sidCookie, function(err, session) {
                if (err || !session || !session.passport.user) {
                    callback('socket Not logged in.', false);
                } else {
                    data.session = session;
                    socketSession = session;
                    console.log("socketSession value " + JSON.stringify(socketSession));
                    callback(null, true);
                }
            });
        });
    });


    io.sockets.on('connection', function(socket) {
        console.log("socket connected");
        console.log("socket.id " + socket.id);

        socket.encryptedUserid = socketSession.passport.user.userId;
        var devicetype = "web";

        var secUserSalt = socketSession.passport.user.salt;

        socket.userid = cryptography.crypto.fnDecryption(
            socket.encryptedUserid, secUserSalt);

        var isMobile = socketSession.passport.user.isMobile;

        var devicetype = "web";
        if (isMobile) {
            devicetype = "mobile";
        }
        socket.on('user:join', function() {
            //==============================develpoment(Aug21)====================

            if (socket.userid in onlineUsersSocketid) {
                onlineUsersSocketid[socket.userid].sockets_ids
                    .push(socket.id);
                onlineUsersSocketid[socket.userid].devicetype
                    .push(devicetype);
            } else {
                onlineUsersSocketid[socket.userid] = {
                    "sockets_ids": [socket.id], // array for all sockets id of this user
                    "devicetype": [devicetype]
                }

            }
            console.log("onlineUsersSocketid " + JSON.stringify(onlineUsersSocketid));
        });

        socket.on('disconnect', function() {
            delete onlineUsersSocketid[socket.userid];
        });
    });
} // end of export module
mainSocket.js

var express = require('express');
var app = express();
var morgan = require('morgan'); //HTTP request logger middleware for node.js
var flash = require('connect-flash');
var multiparty = require('connect-multiparty');
var cookieParser = require('cookie-parser');
var cookieSession = require('express-session');
var bodyParser = require('body-parser'); //Node.js body parsing middleware
var methodOverride = require('method-override');
var errorHandler = require('errorhandler');
var config = require('./config.js');
var passport = require('passport');
var fs = require('fs');
var sessionStore = new cookieSession.MemoryStore();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);

app.set('view engine', 'jade');
app.set('views', __dirname + '/views');

morgan.token('id', function getId(req) {return req.id })

var accessLogStream = fs.createWriteStream(__dirname + '/log/systemAccessWithToken.log', {flags: 'a'})

app.use(assignId)
app.use(morgan(':id :method :url :response-time', {stream: accessLogStream}))

function assignId(req, res, next) {
    next()
}

app.use(bodyParser.json()); //middleware that only parses json

app.use(bodyParser.urlencoded({extended: true}));

app.use(methodOverride(function(req, res) {
    if (req.body && typeof req.body === 'object' && '_method' in req.body) {
        var method = req.body._method;
        delete req.body._method;
        return method;
    }
}));

app.use(cookieParser());
app.use(cookieSession({
    store: sessionStore,
    secret: config.sessionSecret,
    cookie: {maxAge: config.sessionMaxAge}
}));
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash());

if (app.get('env') === 'development') {
    app.use(errorHandler());
}
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.set('Access-Control-Allow-Methods', 'GET, POST');
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
});

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

require('./app/passport')(passport); // pass passport for configuration
var socketcon = require('./app/mainSocket.js');
socketcon.socketconfig(app, io, sessionStore, cookieParser);

require('./routes/controller.js')(app, passport); // load our routes and pass

server.listen(config.port);
var modules = require('../externalModules.js');
var dbConnection = modules.dbConnection;
var cryptography = modules.cryptography;

var onlineUsers = {};
var onlineUsersSocketid = {};

exports.socketconfig = function(app, io, sessionStore, cookieParser) {
    io.set('authorization', function(data, callback) {
        if (!data.headers.cookie) {
            return callback('No cookie transmitted.', false);
        }

        cookieParser(data, {}, function(parseErr) {
            if (parseErr) {
                return callback('Error parsing cookies.', false);
            }

            var sidCookie = (data.secureCookies && data.secureCookies['myuser.sid']) || (data.signedCookies && data.signedCookies['myuser.sid']) || (data.cookies && data.cookies['myuser.sid']);

            sessionStore.load(sidCookie, function(err, session) {
                if (err || !session || !session.passport.user) {
                    callback('socket Not logged in.', false);
                } else {
                    data.session = session;
                    socketSession = session;
                    console.log("socketSession value " + JSON.stringify(socketSession));
                    callback(null, true);
                }
            });
        });
    });


    io.sockets.on('connection', function(socket) {
        console.log("socket connected");
        console.log("socket.id " + socket.id);

        socket.encryptedUserid = socketSession.passport.user.userId;
        var devicetype = "web";

        var secUserSalt = socketSession.passport.user.salt;

        socket.userid = cryptography.crypto.fnDecryption(
            socket.encryptedUserid, secUserSalt);

        var isMobile = socketSession.passport.user.isMobile;

        var devicetype = "web";
        if (isMobile) {
            devicetype = "mobile";
        }
        socket.on('user:join', function() {
            //==============================develpoment(Aug21)====================

            if (socket.userid in onlineUsersSocketid) {
                onlineUsersSocketid[socket.userid].sockets_ids
                    .push(socket.id);
                onlineUsersSocketid[socket.userid].devicetype
                    .push(devicetype);
            } else {
                onlineUsersSocketid[socket.userid] = {
                    "sockets_ids": [socket.id], // array for all sockets id of this user
                    "devicetype": [devicetype]
                }

            }
            console.log("onlineUsersSocketid " + JSON.stringify(onlineUsersSocketid));
        });

        socket.on('disconnect', function() {
            delete onlineUsersSocketid[socket.userid];
        });
    });
} // end of export module
可能是什么问题?

根据,以下是两个服务器端初始化序列,应该可以正常工作:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);


您没有这两个选项。

您的客户端代码是什么样子的?我有'var server=http.createServer(app);var io=require('socket.io')。侦听(服务器);server.listen(config.port);'