1 year ago
#74981
T. Duke
NodeJS: Heroku deployment internal server, EJS template "not a function" error
I have a NodeJS app, with EJS as the templating engine, and when I deploy to Heroku I'm getting an internal server error. Here are the logs:
2022-01-20T13:30:24.000000+00:00 app[api]: Build started by user tylerdukedev@gmail.com
2022-01-20T13:30:44.605827+00:00 app[api]: Release v18 created by user tylerdukedev@gmail.com
2022-01-20T13:30:44.605827+00:00 app[api]: Deploy 82e13b43 by user tylerdukedev@gmail.com
2022-01-20T13:30:45.000000+00:00 app[api]: Build succeeded
2022-01-20T13:30:45.206696+00:00 heroku[web.1]: Restarting
2022-01-20T13:30:45.219319+00:00 heroku[web.1]: State changed from up to starting
2022-01-20T13:30:45.973448+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2022-01-20T13:30:46.136388+00:00 heroku[web.1]: Process exited with status 143
2022-01-20T13:30:48.058009+00:00 heroku[web.1]: Starting process with command `npm start`
2022-01-20T13:30:50.044342+00:00 app[web.1]:
2022-01-20T13:30:50.115141+00:00 app[web.1]: > food-blog@1.0.0 start /app
2022-01-20T13:30:50.115144+00:00 app[web.1]: > node app.js
2022-01-20T13:30:50.115144+00:00 app[web.1]:
2022-01-20T13:30:50.762969+00:00 app[web.1]: Listening on 47634
2022-01-20T13:30:51.003784+00:00 app[web.1]: Connected to MongoDB
2022-01-20T13:30:51.195440+00:00 heroku[web.1]: State changed from starting to up
2022-01-20T13:30:54.911676+00:00 heroku[router]: at=info method=GET path="/" host=food-blog-tdukedev.herokuapp.com request_id=d02d86c4-86b2-4e44-81c8-83467c04f03d fwd="73.129.233.103" dyno=web.1 connect=0ms service=74ms status=500 bytes=404 protocol=https
2022-01-20T13:30:54.917473+00:00 app[web.1]: TypeError: /app/server/views/index.ejs:132
2022-01-20T13:30:54.917479+00:00 app[web.1]: 130| <div class="card-body p-4">
2022-01-20T13:30:54.917481+00:00 app[web.1]: 131| <div class="badge bg-primary bg-gradient rounded-pill mb-2" id="cat-1">
2022-01-20T13:30:54.917482+00:00 app[web.1]: >> 132| <%= entries.at(-1).category %>
2022-01-20T13:30:54.917482+00:00 app[web.1]: 133| </div>
2022-01-20T13:30:54.917483+00:00 app[web.1]: 134| <a class="text-decoration-none link-dark stretched-link" href="#!">
2022-01-20T13:30:54.917483+00:00 app[web.1]: 135| <h5 class="card-title mb-3 animate__animated" id="title-1">
2022-01-20T13:30:54.917483+00:00 app[web.1]:
2022-01-20T13:30:54.917484+00:00 app[web.1]: entries.at is not a function
2022-01-20T13:30:54.917484+00:00 app[web.1]: at eval (eval at compile (/app/node_modules/ejs/lib/ejs.js:662:12), <anonymous>:12:34)
2022-01-20T13:30:54.917485+00:00 app[web.1]: at index (/app/node_modules/ejs/lib/ejs.js:692:17)
2022-01-20T13:30:54.917485+00:00 app[web.1]: at tryHandleCache (/app/node_modules/ejs/lib/ejs.js:272:36)
2022-01-20T13:30:54.917486+00:00 app[web.1]: at View.exports.renderFile [as engine] (/app/node_modules/ejs/lib/ejs.js:489:10)
2022-01-20T13:30:54.917486+00:00 app[web.1]: at View.render (/app/node_modules/express/lib/view.js:135:8)
2022-01-20T13:30:54.917486+00:00 app[web.1]: at tryRender (/app/node_modules/express/lib/application.js:640:10)
2022-01-20T13:30:54.917486+00:00 app[web.1]: at Function.render (/app/node_modules/express/lib/application.js:592:3)
2022-01-20T13:30:54.917487+00:00 app[web.1]: at ServerResponse.render (/app/node_modules/express/lib/response.js:1017:7)
2022-01-20T13:30:54.917487+00:00 app[web.1]: at ServerResponse.res.render (/app/node_modules/express-ejs-layouts/lib/express-layouts.js:77:18)
2022-01-20T13:30:54.917488+00:00 app[web.1]: at exports.homepage (/app/server/controllers/homepageController.js:6:15)
entries.at
is pulling from a MongoDB database with Mongoose, it's populating data from the db.
I've tried to set the views directory to be relative and absolute (per an SO question/answer), and that didn't work.
Here's what entries references:
homepageController.js:
// get home page ('index');
const Entry = require("../models/posts");
exports.homepage = async(req,res) => {
let entries = await Entry.find({})
await res.render('index', {
title: 'Food Blog | Tyler Duke Dev',
entries
});
};
the model:
const mongoose = require('mongoose');
const entrySchema = new mongoose.Schema({
category: {
type: String,
required: true
},
title: {
type: String,
required: true
},
desc: {
type: String,
required: true
},
author: {
type: String,
required: true
},
dateCreated: {
type: Date,
required: true
},
readTime: {
type: String,
required: true
}
})
const Entry = mongoose.model('Entry', entrySchema);
module.exports = Entry;
javascript
node.js
mongodb
heroku
ejs
0 Answers
Your Answer