2

I'm trying to call my function sendError by doing this.instance.sendError, but I get an error like shown below. From the report I can see two lines which it points me to. I guess the problem is with the DatabaseController I've created, but I can't seem to understand what is the issue. Can someone please give me an explanation why this occurs? and by building a DatabaseController like this is it efficient?

SocketHelper.js:12:27
DatabaseController.js:22:24

TypeError: Cannot read property 'sendError' of undefined

function SocketHelper(io, socket){
    this.io = io;
    this.socket = socket;
    this.instance = this;
}

SocketHelper.prototype.getUserById = function(id, callback){
    DatabaseController.databaseQuery("SELECT * FROM users WHERE id = ?", id, function (error, user) {
        if(error || !user.length > 0) {
            return this.instance.sendError("Couldn't find a user with ID: " + id);
        }
        return callback(null, user[0]);
    });
};

module.exports = function (io) {

    io.on('connection', function (socket) {
        var helper = new SocketHelper(io, socket);
        require('./chathelp.js')(socket, io, helper);
    });
};

chathelp.js

module.exports = function (socket, io, controller) {
    socket.on('userinfo', function () {
        controller.getUser(function(error, user){});
    });
}

DatabaseController

var createDatabaseConnection = function (callback) {
    pool.getConnection(function (error, connection) {
        if(error){
            return callback(error);
        }
        return callback(null, connection);
    });
};

var databaseQuery = function (query, parameters, callback) {
    createDatabaseConnection(function (error, connection) {
        if(error){
            return callback(error);
        }
        if(parameters){
            query = mysql.format(query, parameters);
            connection.query(query, function (error, result) {
                connection.release();
                if(error){
                    return callback(error);
                }
                return callback(null, result);
            });
        } else {
            connection.query(query, function (error, result) {
                connection.release();
                if(error){
                    return callback(error);
                }
                return callback(null, result);
            });
        }
    });
};

module.exports = {
    createDatabaseConnection: createDatabaseConnection,
    databaseQuery: databaseQuery
};
  • 1
    @JaredSmith Thanks, I've solved my issue. Seems like I can't google things correctly. Solution was by using var self = this; inside the getUserById prototype. – Richard Woodi May 16 '18 at 14:00
  • No worries, it happens. Thanks for closing it, and I'm glad you got a solution to your problem. – Jared Smith May 16 '18 at 14:04

0 Answers0