Nodejs view doesn't fall apart in layout

I am trying to create a simple layout using CoffeeScript, NodeJS and expressJS. My coffee script

routes.coffee I renamed the routes folder to applications, and my route.coffee file is there in the authentication folder, i.e. apps\authentication\routes.coffee

 routes = (app) -> app.get "/login", (req , res) -> res.render "#{__dirname}/views/login", title: 'Login', stylesheet: 'login' module.exports = routes 

Login to the system . I renamed the routes folder to applications and my login window to it in the authentication folder, i.e. apps\authentication\views\login.jade

 extends ../../../views/layout block content form(action='/sessions', method='post') label | Username input(type='text', name='user') label | Password input(type='password', name='password') input(type='submit', name='Submit') 

Layout.jade This file is located in the default views folder. I use the default layout

 doctype html head title= title body #content h1= title block content != body 

app.js

 require('coffee-script').register(); var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); //var index = require('./routes/index'); //var users = require('./routes/users'); var app = express(); // view engine setup // app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // app.set('view options', { layout: 'views/layout' }); // uncomment after placing your favicon in /public app.use(favicon(path.join(__dirname, '/public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, '/public'))); // app.use(express.static('public')); app.set('view options', { layout: false }); //app.use('/', index); //app.use('/users', users); require('./apps/authentication/routes')(app); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app; 

I created two variables title and stylesheet in routes.coffee , however, when I try to implement these variables in layout.jade ie title, I get undefined as the title in the header.

Can anyone help?

Thanks.

+8
javascript coffeescript express
source share
1 answer

I think you did not use the indentation correctly. In your login:

 extends ../../../views/layout block content form(action='/sessions', method='post') label | Username input(type='text', name='user') label | Password input(type='password', name='password') input(type='submit', name='Submit') 

it should be:

 extends ../../../views/layout block content form(action='/sessions', method='post') label | Username input(type='text', name='user') label | Password input(type='password', name='password') input(type='submit', name='Submit') 
+1
source share

All Articles