'Cannot read property 'substring' of undefined in ejs
When I try to add new blog posts to my website I am continuously getting this error:
TypeError: C:\Users\shruti\Desktop\ejs-challenge\views\home.ejs:15 13|
14| <p> 15| <%= post.content.substr(0, 100) %> 16| <a href="/posts/<%=post._id%>">Read More</a> 17| </p> 18| <% })%>
Cannot read property 'substr' of undefined at eval (eval at compile (C:\Users\shruti\Desktop\ejs-challenge\node_modules\ejs\lib\ejs.js:618:12), :22:39) at Array.forEach () at eval (eval at compile (C:\Users\shruti\Desktop\ejs-challenge\node_modules\ejs\lib\ejs.js:618:12), :16:14) at returnedFn (C:\Users\shruti\Desktop\ejs-challenge\node_modules\ejs\lib\ejs.js:653:17) at tryHandleCache (C:\Users\shruti\Desktop\ejs-challenge\node_modules\ejs\lib\ejs.js:251:36) at View.exports.renderFile [as engine] (C:\Users\shruti\Desktop\ejs-challenge\node_modules\ejs\lib\ejs.js:482:10) at View.render (C:\Users\shruti\Desktop\ejs-challenge\node_modules\express\lib\view.js:135:8) at tryRender (C:\Users\shruti\Desktop\ejs-challenge\node_modules\express\lib\application.js:640:10) at Function.render (C:\Users\shruti\Desktop\ejs-challenge\node_modules\express\lib\application.js:592:3) at ServerResponse.render (C:\Users\shruti\Desktop\ejs-challenge\node_modules\express\lib\response.js:1008:7) at C:\Users\shruti\Desktop\ejs-challenge\app.js:35:9 at C:\Users\shruti\Desktop\ejs-challenge\node_modules\mongoose\lib\model.js:4846:16 at C:\Users\shruti\Desktop\ejs-challenge\node_modules\mongoose\lib\model.js:4846:16 at C:\Users\shruti\Desktop\ejs-challenge\node_modules\mongoose\lib\helpers\promiseOrCallback.js:24:16 at C:\Users\shruti\Desktop\ejs-challenge\node_modules\mongoose\lib\model.js:4869:21 at C:\Users\shruti\Desktop\ejs-challenge\node_modules\mongoose\lib\query.js:4397:11
home.ejs
:
<%- include("partials/header") -%>
<h1>HOME</h1>
<p> <%= startingContent %> </p>
<% console.log(posts); %>
<div class="">
<% posts.forEach(function(post){ %>
<h1><%= post.title%></h1>
<p>
<%= post.content.substr(0, 100) %>
<a href="/posts/<%=post._id%>">Read More</a>
</p>
<% })%>
<form action="/compose">
<button class="btn btn-primary" type="compose" name="button">COMPOSE</button>
</form>
</div>
<%- include("partials/footer") -%>
Solution 1:[1]
The error message says that it "Cannot read property 'substr'
of undefined
", which means post.content
is undefined
inside your posts.forEach()
loop. Try to log post
and check its content.
Solution 2:[2]
I went through your problem and the easiest solution to that is put brackets between post.content and frame it this way:
<%= (post.content).substr(0, 100) %>
It is working i tried it myself, Enjoy learning
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Zsolt Meszaros |
Solution 2 | Kumar Shanu |