Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NodeJs Express, show session in view

I have a server written in express 3 and I'm using EJS as a templating engine, what I would like is to know how can I display my session variable in my View.

app.js /** * Module dependencies. */

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({secret : 'xvxcvxvcxvxcv'}));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));


var ck_email = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
var ck_username = /^[A-Za-z0-9_]{1,20}$/;
var ck_password =  /^[A-Za-z0-9!@#$%^&*()_]{6,20}$/;

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

app.post("/Register",function(req, res){
    var username = req.body.username;
    var password = req.body.password;
    //var confirmpassword = req.body.confirmpassword;
    var email = req.body.email;
    var errors = [];

    if (!ck_email.test(email)) {
        errors[errors.length] = "Invalid email adress";
    }
    if (!ck_username.test(username)) {
        errors[errors.length] = "Invalid username .";
    }
    if (!ck_password.test(password)) {
        errors[errors.length] = "Invalid password ";
    }
    if (errors.length > 0) {
         req.session.response = "Erors Occured While Registration!";
         res.redirect('/Signup');
    }
    else{
        req.session.response = "Account Successfully Created";
        res.redirect('/Signup');
    } 
});

app.get("/Signup", function(req, res){
    res.render('Signup.ejs', {
        layout:false
    });
});

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

The Session is created I can see it in firebug however I don't see how to display it in my view, I did as below and I get this error :

500 ReferenceError: C:\Users\user\workingFolder\views\Signup.ejs:27 25| <div> 26| <form action="/Register" method="post"> >> 27| <div class="error-message"><%= response %></div> 28| <label for="username">Username<b style="color:red;">*</b>:</label> 29| <input type="text" id="username" name="username"><br> 30| <label for="password">Password<b style="color:red;">*</b>:</label> response is not defined

Here is my View code :

....................
....................
<form action="/Register" method="post">
<div class="error-message"><%= response %></div>
                    <label for="username">Username<b style="color:red;">*</b>:</label>
                    <input type="text" id="username" name="username"><br>
                    <label for="password">Password<b style="color:red;">*</b>:</label>
                    <input type="password" id="password" name="password"><br>
                    <label for="confirmpassword">Confirm Password<b style="color:red;">*</b>:</label>
                    <input type="password" id="confirmpassword" name="confirmpassword"><br>
                    <label for="email">Email<b style="color:red;">*</b>:</label>
                    <input type="text" id="email" name="email"><br>
                    <input type="submit" value="Register">
                </form> 
................
................
like image 883
OussamaLord Avatar asked Jul 21 '26 09:07

OussamaLord


1 Answers

If you want to see the session for debugging, I recommend the express-debug toolbar, here: https://github.com/devoidfury/express-debug

Otherwise, you'll need to pass req.session into the template context, and likely output it as JSON.

res.render('Signup.ejs', {
    layout:false,
    session: req.session
});

and in your template:

<%= JSON.stringify(session) %>
like image 183
furydevoid Avatar answered Jul 24 '26 00:07

furydevoid



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!