3

I am trying to manage session in Nodejs like if user is already logged in, will be taken directly to welcome page. I have used a separate Router module in which I am trying to access request parameters to manage sessions. I have searched and used

req.params

req.body

req.query

to access uname parameter in my html file. All I am getting is undefined

I have also tried the URL module but no luck. Please try to be thorough as I am beginner in Nodejs.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>{{title}}</title>
        <link rel="stylesheet" href="../CSS/style.css">
  </head>
    <script type="text/javascript">
        function validate(){

            var username = document.getElementById("username").value;
            var password = document.getElementById("password").value;
            if ( username == "[email protected]" && password == "admin123"){
                return false;
            }
            else {
                alert ("Login Failed");

            }
        }
    </script>
  <body>

    <div class="container">

  <div id="login-form">

    <h3>Login</h3>

    <fieldset>

      <form >

        <input type="email" id="username" name="uname">

        <input type="password" id="password" >
        <a href ="/welcome"> Welcome </a>
        <input type="submit" value="Login" onclick="return (validate())" />

        <footer class="clearfix">

          <p><span class="info">?</span><a href="#">Forgot Password</a></p>

        </footer>

      </form>

    </fieldset>

  </div> <!-- end login-form -->

</div>

  </body>
</html>

app.js

var express = require('express'),
    app = express();
    path = require('path')  
    cookieParser = require('cookie-parser')
    session = require('express-session')
    config = require('./config/config.js');
    connectMongo = require('connect-mongo')(session)
    mongoose = require('mongoose').connect(config.dbURL)

app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('hogan-express'));
app.set('view engine', 'html');
app.use(express.static(path.join(__dirname, 'public')));
app.use(cookieParser());
var env = process.env.NODE_ENV || 'development';

if(env==='development'){
    app.use(session({secret:config.sessionSecret, saveUninitialized:true, resave:true}));
} else {
    app.use(session({
        secret:config.sessionSecret,
        store: new connectMongo({
            //url:config.dbURL,
            mongooseConnection:mongoose.connections[0],
            stringify:true
        }),
        saveUninitialized:true,
        resave:true
    }))
}

/*
app.route('/').get(function(req, res, next){
    //res.send('<h1>Hello World!</h1>');
    res.render('login', {title:'Welcome to AIOCloud'});
})

OR

require('./routes/routes.js')(express, app, session);
*/

var userSchema = mongoose.Schema({
    username:String,
    password:String,
    fullname:String
})

var person = mongoose.model('aiocloud', userSchema);

var john = new person({
    username:'johndoe',
    password:'john_wants_to_login',
    fullname:'John Doe'
})

john.save(function(err){
    console.log('Done !');
});

require('./routes/routes.js')(express, app);

app.listen(3000, function(){
    console.log('AIOCloud Working on Port 3000');
    console.log('Mode: ' + env);
})

routes.js

module.exports = function(express, app){
    var router = express.Router();
    var bodyParser = require('body-parser')
    var ses;

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

    router.get('/', function(req, res, next){
        res.render('login.html');       
    });

    router.get('/login', function(req, res, next){
        ses = req.session;

        if(ses.uname)
            res.redirect('/welcome');
        else{
            ses.uname = req.params.uname;
            console.log(ses.uname);
            res.redirect('/welcome');
        }   
    });

    router.get('/welcome', function(req, res, next){

        if(ses.uname){
            //console.log(ses.id);
            res.render('welcome', {title:'Welcome'});
        }
        else
            res.render('login.html');
    });

    router.get('/setcolor', function(req, res, next){
        req.session.favColor = "Red";
        res.send('Setting favourite color!');
    });

    router.get('/getcolor', function(req, res, next){
        res.send('Favourite color is ' + (req.session.favColor===undefined?"Not Found":req.session.favColor))
    });

    app.use('/', router);
}

2 Answers 2

1

ses.uname is undefined because you don't send any data from the page.

When you try to set ses.uname like this:

ses.uname = req.params.uname;

you miss that you must do some request like post request from html page to node.js server and in this post you must pass a parameter (uname) with some data:

$.post("/login",{uname: username},function(data){        
     // do some stuff when post is completed
});

then your req.params.uname variable is setted and then session parameter uname is setted.

Try this and good luck!

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks, with your suggestion and adding some extra code it worked.
Good! I'm happy to help you!
0
var bodyParser = require('body-parser')

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

Please use https://github.com/expressjs/body-parser

1 Comment

Don't mind my asking but is there anything wrong with my html file as i don't see any request parameters like httt://localhost:3000/?uname=slsll

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.