Friday 21 April 2017

How to https every view change via Express in Nodejs

Hi I am having a problem to https every single view in NodeJS. Currently I am using Handlebars as server side templating. To render a view, for example, res.render(loginDir, {login: false, admin: false, header: "Welcome!!"}); Every route I access is http://blablabla. I want it to be https://blablabla. Please help me with this...thanks in advance

The following will be my code:

Uiroutes.ts

import express = require('express');
import path = require('path');

var app = express();

class Uiroutes {

    get uiroutes() {

        var rootManageDir = path.join(__dirname,'../../../client/management/manage');
        var rootExecutionDir = path.join(__dirname,'../../../client/execution/execution');
        var rootUserHomeDir = path.join(__dirname,'../../../client/userhome/userhome');
        var loginDir = path.join(__dirname,'../../../client/login/login');



        app.get('/management',this.adminAuth, (req: express.Request, res: express.Response) => {
            res.render(rootManageDir, {login: true, admin: true, header: "Admin, Welcome back!"});
        });
        app.get('/execution',this.adminAuth, (req: express.Request, res: express.Response) => {
            res.render(rootExecutionDir, {login: true, admin: true, header: "Admin, Welcome back!"});
        });
        app.get('/userhome', this.userAuth, (req: express.Request, res: express.Response) => {
            let header = req.body.username + ', Welcome back!';
            res.render(rootUserHomeDir, {login: true, admin: false, header: header});
        });
        app.get('/login', (req: express.Request, res: express.Response) => {
            res.render(loginDir, {login: false, admin: false, header: "Welcome!!"});
        });
        app.get('/logout', this.logout, (req: express.Request, res: express.Response) => {
            res.redirect('/login');
        });
        return app;
    }

    userAuth(req, res, next) {
        if(req.session["user"]&&(req.session["user"].role == 'user')) {
            req.body.username = req.session["user"].username;
            next(); 
        } else {
            if(req.session["user"]&&(req.session["user"].role == 'admin')) {
                req.body.username = req.session["user"].username;
                res.redirect('/management');
            } else {
                res.redirect('/login');
            }
        }
    }

    adminAuth(req, res, next) {
        //console.log(req.session);
        if(req.session["user"]&&(req.session["user"].role == 'admin')) {
            req.body.username = req.session["user"].username;
            next();
        } else {
            if(req.session["user"]&&(req.session["user"].role == 'user')) {
                req.body.username = req.session["user"].username;
                res.redirect('/userhome');
            } else {
                res.redirect('/login');
            }
        }
    }

    logout(req, res, next) {
        if(req.session["user"]){
            console.log("logged in");
            delete req.session["user"];
            console.log(req.session["user"]);
            next();
        } else {
            delete req.session;
            next();
        }

    }
}
export = Uiroutes;

In my server.ts

//Set view engine
app.set('view engine', 'hbs');

var defaultDir = path.join(__dirname, '../client/layout/default');
var layoutDir = path.join(__dirname, '../client/layout');
var viewpath = path.join(__dirname, '../client')

//Config the view engine
app.engine('hbs', hbs.express4({
    defaultLayout: defaultDir,
    layoutsDir: layoutDir
}));

//config view path
app.set('views', viewpath);

app.use(new UIRoutes().uiroutes);



via Mathers

No comments:

Post a Comment