简体   繁体   English

Nodejs Socket.io未连接

[英]Nodejs Socket.io is not connecting

I'm connecting Socket in my App but the configuration is mismatched because of which socket is not connecting. 我正在我的App中连接Socket,但配置不匹配,因为哪个套接字未连接。 What could be the problem? 可能是什么问题呢? I'm referring to "Mastering Web Application Development with Express" for structuring 我指的是“使用Express掌握Web应用程序开发”的结构

app.js 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);

mainSocket.js mainSocket.js

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

What could be the issue? 可能是什么问题?

Per the socket.io docs , these are two server-side initialization sequences that should work: 根据socket.io docs ,这是两个应该起作用的服务器端初始化序列:

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

or 要么

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

You don't have either of these. 您没有任何一个。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM