ejs 'partial is not defined'


Okay I have a mostly static homepage but I wanted to have partial views that for navigation, footer ect. I'm using ejs and it looks like this:

my controller: home.js

// Dependencies
var express = require('express');

    module.exports = {
        get: function(req, res) {
            app.set('view engine', 'ejs');  
            var model = {



My views directory has nav, home and footer all .ejs

Then the actual html file stripped of text would look as following.

<!DOCTYPE html>
<meta charset="UTF-8" >
<title>Tom Jones</title>

<!-- CSS -->
<link rel="stylesheet" href="/css/home.css" type="text/css" media="screen" >


<%- partial('nav') %>

<!--content part -->  
<div id="showcontainer">


<div id="maincontainer">



The Problem When ever I test it out I run into the error partial is not defined. I tried requiring ejs but no success.

7/5/2012 7:59:53 PM

As @Pickels said, Partial was removed in 3.x. However, the most recent version of EJS provides a mechanism for including "partials", called "include":


Includes are relative to the template with the include statement, for example if you have "./views/users.ejs" and "./views/user/show.ejs" you would use <% include user/show %>. The included file(s) are literally included into the template, no IO is performed after compilation, thus local variables are available to these included templates.

The following will work as a replacement for your old partial() function. You'll need to make tweaks elsewhere to support Express 3.x completely, but for the most part this seems to work well (better actually - less code and more performant).

<% include nav.ejs %> <!-- replaces your old <%- partial('nav') %> -->
11/26/2012 5:07:19 PM

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow