Error: Failed to lookup view "users/register" in views directory

Viewed 461

My app can not find a page from the views directory. I think I've setup the configuration correctly and other files are working fine in views but this one is not working.

Error: Failed to lookup view "users/register" in views directory "D:\NODE PROJECTS\MyBlog\views"
    at Function.render (D:\NODE PROJECTS\MyBlog\node_modules\express\lib\application.js:580:17)
    at ServerResponse.render (D:\NODE PROJECTS\MyBlog\node_modules\express\lib\response.js:1017:7)
    at file:///D:/NODE%20PROJECTS/MyBlog/src/routes/UserRouter.js:18:9
    at Layer.handle [as handle_request] (D:\NODE PROJECTS\MyBlog\node_modules\express\lib\router\layer.js:95:5)
    at next (D:\NODE PROJECTS\MyBlog\node_modules\express\lib\router\route.js:137:13)     
    at Route.dispatch (D:\NODE PROJECTS\MyBlog\node_modules\express\lib\router\route.js:112:3)

This is my path setup

app.engine('ejs', engine)
app.set('view engine', 'ejs')
app.set('views', path.join(__dirname, '../templates/views'))

And a call from router

UserRoter.get('/register', (req, res)=>{
    res.render('users/register', {title: 'Sign Up'})
})

And this is the structure of views directory

enter image description here

1 Answers

You have a bug in the third line of code, instead of:

app.set('views', path.join(__dirname, '../templates/views'))

Should be:

app.set('views', path.join(__dirname, '/templates/views'))

I mirrored your project (folder and file structure) and everything seems to be fine:-)

Folder & file structure :

enter image description here

app.js

const express = require("express");
const path = require("path");

const port = 3000;
const app = express();

app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "/templates/views"));

app.get("/", (req, res) => {
  res.render("index", { title: "Keep Calm and Do not stop coding!" });
});

app.get("/register", (req, res) => {
  res.render("users/register", { title: "Sign Up" });
});

app.listen(port, () => {
  console.log(`Server is  listening at http://localhost:${port}`);
});

register.ejs

<title><%= title %></title>
<h1>Register page works fine!</h1>

output:

enter image description here

Tested with "ejs": "^3.1.6", "express": "^4.17.2", node 16.13.0

Related