0

Though my rendering path is correct when I hit http://localhost:4444/admin/posts/create it shows some error like

Error: Failed to lookup view "/admin/posts/create" in views directory "D:\node practise\CMS\views"

app.js file is like

const express = require('express');
const app = express();
const path = require('path');
const exphbs = require('express-handlebars');
const mongoose = require('mongoose');


mongoose.connect('mongodb://localhost:27017/cms', { useNewUrlParser: true })
    .then(db => {
        console.log('MONGO CONNECTED!');
    })
    .catch(error => {
        console.log('MONGO NOT CONNECTED!');
    })



//making app to use static file
app.use(express.static(path.join(__dirname, 'public')));

//define template engine
app.set('view engine', 'handlebars');

//set default engine
app.engine('handlebars', exphbs({defaultLayout: 'home'}));

//load routes
const home = require("./routes/home/index");
const admin = require("./routes/admin/index");
const posts = require("./routes/admin/posts");

//use routes
app.use(home);
app.use("/admin", admin);
app.use("/admin/posts", posts);


//setting up server
app.listen(4444, () => {
    console.log('Listening....');
});

I have posts.js that handles this route like

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


router.all('/*', (req, res, next) => {
    req.app.locals.layout = 'admin';
    next();
})

router.get('/', (req, res) => {
    res.send('It works!');
})

router.get('/create', (req, res) => {
    res.render('/admin/posts/create');
})

module.exports = router;

And I have my views folder structure as enter image description here

What may be the cause of error? When I try to send response it works but when I try to render the view it shows error.

3
  • is your index.js file (I suppose it's called like that) in your root folder? Commented Sep 1, 2018 at 13:07
  • No it is not inside root folder. I have folder called routes and inside this I have next directory called posts and inside this I have index.js file. Commented Sep 1, 2018 at 13:18
  • If I understood you correctly, that means that inside your router.get for /create you did not put good path for res.render Commented Sep 1, 2018 at 13:19

1 Answer 1

2

Can you try res.render('admin/posts/create');?

If the view folders is set properly like this: app.set('views', './views'), you should be able to resolve simple view name like res.render('myview') under ./views folder

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.