2013-01-15 86 views
1

我想包括模块,我发现,这将有助于管理用户: http://www.codeproject.com/Articles/382561/Session-Management-in-Nodejs的Node.js - 类型错误:对象#<Object>有没有方法

Ive copied the code and put it in the same directory as my server.js

我需要它这样做:

var express = require('express'); 
var http = require('http'), 
mysql = require("mysql"); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); 
var sessionMgm = require("./sessionManagement"); 

现在在我的插座我这样做:

io.sockets.on('connection', function (socket) { 

    socket.on('setUserInfo', function (data) { 
     var sess = new Object(); 
     sess.sessionId = socket.id; 
     sess.userId = data.userId; 
     sess.username = data.username; 
     sess.role = data.role; 
     sessionMgm.add(sess); 
    }); 


    socket.on("private", function(data) { 
     if(data.agentName.length <= 0) { 
      data.agentName = 'Besökare'; 
     }  
     io.sockets.in('Room_' + data.user_id).emit('updatechat', data.agentName, data.msg); 
     var user = sessionMgm.getSessionByUserId(data.id); 

     console.log('::: A socket with ID ' + user + ' connected! ::: '); 
    }); 

}); 

但是我磕ep得到这个错误:

TypeError: Object # has no method 'getSessionByUserId'

无法似乎弄清楚最新错误,任何想法?

sessionManagement.js:

module.exports = sessionManagement; 

var sessions = []; 

//User roles list 
var userRoles = { 
    Admin: "administrator", 
    User: "user", 
    Supervisor: "supervisor" 
}; 

var sessionManagement = { 
    indexOf: function(sessionId) { 
    for(var i in sessions) { 
     if(sessions[i].sessionId == sessionId) 
      return i; 
    } 

    return null; 
    }, 
    indexOfUser: function(userId) { 
    for(var i in sessions) { 
     if(sessions[i].userId == userId) 
      return i; 
    } 

    return null; 
    }, 

    add: function(sessionData) { 
    sessions.push(sessionData); 
    }, 
    remove: function(sessionId) { 
    var index = this.indexOf(sessionId); 
    if(index != null) { 
     sessions.splice(index, 1); 
    } else { 
     return null; 
    } 
    }, 
    removeByUserId: function(userId) { 
    var index = this.indexOf(userId); 
    if(index != null) { 
     sessions.splice(index, 1); 
    } else { 
     return null; 
    } 
    }, 

    getSessionById: function(userId) { 
    var index = this.indexOfUser(userId); 
    if(index != null) { 
     return sessions[index]; 
    } else { 
     return null; 
    } 
    }, 
    getSessionByUserId: function(sessionId) { 
    var index = this.indexOfUser(userId); 
    if(index != null) { 
     return sessions[index]; 
    } else { 
     return null; 
    } 
    }, 

    isAdmin: function(userId) { 
    var index = this.indexOfUser(userId); 
    if(index != null) { 
     if(users[index].role == userRoles.Admin) { 
      return true; 
     } else { 
      return false; 
     } 
    } else { 
     return null; 
    } 
    }, 
    getUsersByRole: function(role) { 
    var usersByRole = []; 
    for(var i in users) { 
     if(users[i].role == role) 
      usersByRole.push(users[i]); 
    } 

    return usersByRole; 
    } 
}; 
+2

你把'module.exports = sessionManagement;'你的sessionManagement.js文件中?更好的是:发布代码 – madflow

+0

Dident有那里,现在我得到一个不同的错误:TypeError:不能调用未定义的方法'getSessionByUserId'..所以事情发生:) – Elvin

+2

@Elvin发布您的sessionManagement.js,否则我们只能猜 – soulcheck

回答

4

正如madflow提到的,你在sessionManagement.js

失踪module.exports = sessionManagement那么你得到的错误,因为你出口sessionManagement,对其进行初始化之前。将出口行移动到sessionManagement.js的末尾应该可以解决这个问题。

module.exports = sessionManagement; // <- you export here 
    ... 
    ... 
    ... 
var sessionManagement = { // and initialize here 

虽然sessionManagement声明被提升到模块顶部(这就是为什么你把它分配给module.exports时没有得到Unexpected identifierReferenceError),它的初始化没有,那么到底发生了什么幕后是这样的事情:

var sessionManagement; // undefined at this point 

module.exports = sessionManagement; // <- you export here, 
// but sessionManagement is undefined at this point 
// and so will be module.exports after this line 
    ... 
    ... 
    ... 
sessionManagement = { // and initialize here 
+0

工作正常! :) Ofc现在我得到新的错误:/ var index = this.indexOfUser(userId); ^ ReferenceError:userId没有定义 – Elvin

+0

@Elvin在'getSessionByUserId'定义中将'sessionId'更改为'userId' – soulcheck

+0

Beautiful !!!它现在实际上工作:D – Elvin

相关问题