Why does express-ejs-layout fails to render layout.ejs? -


in configuration below, contents of home.ejs not appear plugged <%- body %> of layout.ejs page. hitting default route / returns contents of home.ejs none of structure or styling in layout.ejs.

i couldn't find useful information troubleshoot how express-ejs-layouts work. thoughts on why might be?

app structure:

. ├── app ├── main.js ├── node_modules ├── package.json └── public     ├── css     │   └── style.css     ├── js     │   └── app.js     └── views         ├── layout.ejs         └── pages             ├── events.ejs             ├── home.ejs             └── test.ejs 

configuration snippet:

// file: app/server.js  // template engine app.set('view engine', 'ejs'); app.use(expresslayouts);  // set views directory app.set('views', __dirname + '/../public/views');  app.use(express.static(__dirname + '/../public')); 

route:

//file: app/controllers/maincontroller.js  exports.home = function(req,res){     res.render('pages/home'); } 

ejs files:

layout.js (snippet)

    <!--file: public/views/layout.ejs --> ...         <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-bvyiisifek1dgmjrakycuhahrg32omucww7on3rydg4va+pmstsz/k68vbdejh4u" crossorigin="anonymous">          <link rel="stylesheet" href="../css/style.css">          ...              <main id="site-main">                 <div class="container">                     <%- body %>                 </div>             </main> ... 

home.ejs

<!--file: public/views/pages/home.ejs -->     home page 

edit 1:

my example above didn't highlight declaring route app.use('/',router) before use.app(expresslayouts). swapping around fixed problem.

i set simple express server using file structure. if request home page client, receive:

<main id="site-main">     <div class="container">         home page     </div> </main> 

this want, right? content of home.ejs included in layout.ejs.

i wonder why it's not working you. simplified server.js used (note no special routing file):

var express = require('express'); var expresslayouts = require('express-ejs-layouts');  var app = express();  app.set('view engine', 'ejs'); app.use(expresslayouts);  app.set('views', __dirname + '/../public/views'); app.use(express.static(__dirname + '/../public'));  app.get('/', function(req, res) {    res.render('pages/home'); });  app.listen(3000); 

my dependencies in package.json:

{   "ejs": "^2.5.2",   "express": "^4.14.0",   "express-ejs-layouts": "^2.2.0" } 

tell me if works you, can research what's problem configuration.

edit: turned out op put route declaration app.use('/',router); before app.use(expresslayouts); that's why layout.ejs not considered rendering.


Comments

Popular posts from this blog

javascript - Thinglink image not visible until browser resize -

firebird - Error "invalid transaction handle (expecting explicit transaction start)" executing script from Delphi -

mongodb - How to keep track of users making Stripe Payments -