0

I'm implementing an MVC pattern in Node.js and I have it setup as described below. I'm getting a page on localhost which is just hanging and '/' in my console.log as I have a logger.

app.js

var express  = require("express");
var partials = require("express-partials");
var cookies  = require("cookie-parser");
var session  = require("express-session");
var uuid     = require("node-uuid");
var parser   = require("body-parser");
var csrf     = require("csurf");
var compress = require("express-html-minify");

var logger   = require("./controllers/logger");
var errors   = require("./controllers/errors");
var utility  = require("./controllers/utility");

var routes   = require("./routes");

var app  = new express();
var port = 80;

app.set("view engine", "ejs");
app.set("views", __dirname + "/views");
app.set("view options", {defaultLayout: "layout"});

app.use(express.static(__dirname + "/public"));

app.use(logger.log);
app.use(partials());
app.use(cookies());
app.use(session({secret: uuid.v1(), resave: true, saveUninitialized: true}));
app.use(parser.json());
app.use(parser.urlencoded({extended: false}));
app.use(csrf());
app.use(utility.csrf);
app.use(compress);
app.use(routes.controller);

app.use(errors.error);
app.use(errors.notfound);

app.listen(port);
console.log("app listening on port " + port);

./routes/index.js

var express = require("express");

var app = express();

var controllers = require("../controllers");

exports.controller = function() {
    app.get("/", controllers.index);
    app.get("/login", controllers.login);
    app.post("/login", controllers.process);
    app.get("/reset", controllers.reset);
    app.get("/whoops", controllers.whoops);
};

./controllers/index.js

exports.index = function(request, response) {
    response.render("index", {layout: "layout", title: "Index", cookie: JSON.stringify(request.cookies), session: JSON.stringify(request.session)});
};

exports.login = function(request, response) {
    response.render("login", {layout: "layout", title: "Login", cookie: JSON.stringify(request.cookies), session: JSON.stringify(request.session)});
};

exports.process = function(request, response) {
    response.render("process", {layout: "layout", title: "Process", username: request.body.username});
};

exports.reset = function(request, response) {
    response.render("reset", {layout: "layout", title: "Reset"});
};

exports.whoops = function(request, response) {
    response.render("whoops", {layout: "layout", title: "Whoops"});
};

1 Answer 1

1

There are couple of changes required to fix the router issue.

File "app.js" changes:-

1) Change the routes as mentioned below though it is not mandatory to include index in the path. This way you are clearly referring the index file.

var routes   = require("./routes/index");

2) Replace "app.use(routes.controller)" code with the below code

app.use('/', routes);

File "routes/index.js" changes:-

Replace the file content as mentioned below:-

Now, the requests will be routed to respective methods in "controllers/index.js" as per the URL.

var express = require("express");
var router = express.Router();

var controllers = require("../controllers/index");
router.get("/", controllers.index);
router.get("/login", controllers.login);
router.post("/login", controllers.process);
router.get("/reset", controllers.reset);
router.get("/whoops", controllers.whoops);

module.exports = router;
Sign up to request clarification or add additional context in comments.

Comments

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.