Bird
Raised Fist0
Expressframework~3 mins

Why EJS template setup in Express? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

Discover how to stop repeating yourself and build web pages that update themselves!

The Scenario

Imagine building a website where you have to write the same HTML structure over and over for every page, manually inserting data each time.

The Problem

Manually copying and pasting HTML with data inserted by hand is slow, repetitive, and easy to make mistakes. Updating the layout means changing every page separately.

The Solution

EJS templates let you write HTML with placeholders for data. You write the layout once, and EJS fills in the data automatically when the page loads.

Before vs After
✗ Before
res.send("<html><body><h1>Welcome, " + userName + "</h1></body></html>");
✓ After
res.render('index', { userName: userName });
What It Enables

You can create dynamic web pages easily, reusing templates and separating design from data.

Real Life Example

A blog site where each post page uses the same template but shows different post content automatically.

Key Takeaways

Manual HTML duplication is slow and error-prone.

EJS templates separate HTML layout from data.

This makes dynamic page creation simple and maintainable.

Practice

(1/5)
1. What does the line app.set('view engine', 'ejs') do in an Express app?
easy
A. It creates a new EJS file in the views folder.
B. It installs the EJS package automatically.
C. It tells Express to use EJS as the template engine for rendering views.
D. It starts the Express server with EJS support.

Solution

  1. Step 1: Understand the purpose of app.set

    This method configures Express settings, here it sets the template engine.
  2. Step 2: Identify what 'view engine' setting does

    Setting 'view engine' to 'ejs' tells Express to use EJS to render view files automatically.
  3. Final Answer:

    It tells Express to use EJS as the template engine for rendering views. -> Option C
  4. Quick Check:

    app.set('view engine', 'ejs') = Use EJS [OK]
Hint: Remember: app.set('view engine', 'ejs') enables EJS rendering [OK]
Common Mistakes:
  • Thinking it installs EJS automatically
  • Confusing it with creating files
  • Assuming it starts the server
2. Which of the following is the correct way to render an EJS template named index.ejs with Express?
easy
A. res.render('index.ejs')
B. res.view('index')
C. res.send('index.ejs')
D. res.render('index')

Solution

  1. Step 1: Recall how Express renders templates

    Express uses res.render with the template name without extension.
  2. Step 2: Identify correct syntax

    Passing 'index' (without '.ejs') is correct; Express adds the extension automatically.
  3. Final Answer:

    res.render('index') -> Option D
  4. Quick Check:

    Use res.render('templateName') without extension [OK]
Hint: Use template name without extension in res.render() [OK]
Common Mistakes:
  • Including the .ejs extension in res.render()
  • Using res.send() instead of res.render()
  • Using non-existent res.view() method
3. Given this Express code snippet, what will be the output in the browser?
app.set('view engine', 'ejs');

app.get('/', (req, res) => {
  res.render('greeting', { name: 'Sam' });
});

And the greeting.ejs file contains:
<h1>Hello, <%= name %>!</h1>
medium
A.

Hello, <%= name %>!

B.

Hello, Sam!

C. Error: name is not defined
D.

Hello, !

Solution

  1. Step 1: Understand data passing to EJS

    The object { name: 'Sam' } passes 'Sam' as the value for 'name' in the template.
  2. Step 2: Interpret EJS syntax in template

    <%= name %> outputs the value of 'name' safely, so it becomes 'Sam'.
  3. Final Answer:

    <h1>Hello, Sam!</h1> -> Option B
  4. Quick Check:

    EJS <%= %> inserts variable value [OK]
Hint: EJS <%= %> inserts passed data values directly [OK]
Common Mistakes:
  • Expecting raw template tags to show in output
  • Forgetting to pass data object to render
  • Confusing <%= %> with <% %> (no output)
4. What is wrong with this Express setup for EJS?
const express = require('express');
const app = express();

app.set('view engine', 'ejs');

app.get('/', (req, res) => {
  res.render('home.ejs');
});
medium
A. The template name in res.render should not include the '.ejs' extension.
B. EJS must be required explicitly with require('ejs').
C. app.set should be called after app.get.
D. res.render cannot be used inside app.get.

Solution

  1. Step 1: Check usage of res.render

    res.render expects the template name without the file extension.
  2. Step 2: Identify the error in code

    Passing 'home.ejs' includes extension, which causes Express to look for 'home.ejs.ejs'.
  3. Final Answer:

    The template name in res.render should not include the '.ejs' extension. -> Option A
  4. Quick Check:

    Use res.render('templateName') without extension [OK]
Hint: Never add .ejs extension in res.render() call [OK]
Common Mistakes:
  • Adding .ejs extension in res.render()
  • Thinking require('ejs') is mandatory
  • Changing app.set order unnecessarily
5. You want to render a list of users dynamically in an EJS template. Which setup correctly passes the users array and renders it inside users.ejs?
const users = ['Anna', 'Bob', 'Cara'];

app.get('/users', (req, res) => {
  // What goes here?
});

Choose the correct code to replace // What goes here?.
hard
A. res.render('users', { users: users });
B. res.render('users.ejs', { users });
C. res.send('users', { users });
D. res.render('users', users);

Solution

  1. Step 1: Understand how to pass data to EJS

    Data must be passed as an object with keys matching template variables.
  2. Step 2: Check correct syntax for res.render

    Use res.render('templateName', { key: value }) without file extension.
  3. Final Answer:

    res.render('users', { users: users }); -> Option A
  4. Quick Check:

    Pass data as object in res.render(template, data) [OK]
Hint: Pass data as object: res.render('name', {key: value}) [OK]
Common Mistakes:
  • Including .ejs extension in template name
  • Passing array directly instead of inside object
  • Using res.send instead of res.render
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard