Search code examples
javascriptnode.jsredisnode-mysqlnode-redis

Storing current session in variable to use in MySQL Query


I want to fetch some values from the current user Session and use them in MySQL query. I am working on Node.js and using redis to manage sessions.

File Name:User.js

var sessionUtils = require('./../services/sessionUtils');
var Constants = require('./../constants');
var config = require('./../config');
var databaseUtils = require('./../services/databaseUtils');
var redisUtils = require('./../services/redisUtils');
var util = require('util');


showUserPage: function* (next){
    var queryString = "";
    var query = "";

    /*Do something to store session in variable*/       

    queryString = "select * from table where state='%s' and city='%s';";
    query = util.format(queryString,/*state variable here*/, /*city variable 
here*/);
    var user = yield databaseUtils.executeQuery(query);
    console.log(query);
    yield this.render('user', {
        user:user
    });
}

File Name: sessionUtils.js

var redisUtils = require('./redisUtils');
var uuid = require('uuid');
var thunkify = require('thunkify');

saveUserInSession: function(user, cookies) {
    var sessionId = uuid.v1();  // uuid: uniqe id every time
    var sessionObj = {user: user};
    redisUtils.setItemWithExpiry(sessionId,  JSON.stringify(sessionObj), 86400);    // 86400: for 1 day
    cookies.set("SESSION_ID", sessionId);
},

 getCurrentUser: thunkify(function(sessionId, callback) {
    var currentUser;
    if(sessionId) {
        redisUtils.getItemWithCallback(sessionId, function(err, res) {
            if(err) {
                logger.logError(err);
            }
            if(res == null) {
                callback(currentUser);
            } else {
                callback(err, JSON.parse(res).user);
            }
        });
    } else {
        callback(currentUser);
    }
})

I am using line below in Login.js file to save user in session .

sessionUtils.saveUserInSession(results[0], this.cookies);

Help me out with this.


Solution

  • I have solved this problem by placing following code in place of /* Do something to store session in variable */

    var sessionId = this.cookies.get("SESSION_ID");
    var currentUser = yield sessionUtils.getCurrentUser(sessionId); 
    

    and used it in MySQL query as given below:

    queryString = "select * from table where state='%s' and city='%s';";
    query = util.format(queryString,currentUser.state, currentUser.city);
    

    Hope, it helps others too.