app.js
const express = require('express');
const morgan = require('morgan');
const mongoose = require('mongoose');
const { render } = require('ejs');
const courseRoutes = require('./routes/courseRoutes');
const authRoutes = require('./routes/authRoutes');
const cookieParser = require('cookie-parser');
const { requireAuth, checkUser } = require('./middleware/authMiddleware');
const Course = require('./models/course');
const User = require('./models/User');
// express app
const app = express();
// connect to mongodb
const dbURI = 'mongodb+srv://sperry53:[email protected]/?retryWrites=true&w=majority&appName=FinalProjectGroup5';
mongoose.connect(dbURI)
.then((result) => app.listen(3000))
.catch((err) => console.log(err));
// register view engine
app.set('view engine', 'ejs');
// middleware and static files
app.use(express.static('public'));
app.use(express.urlencoded({ extended: true }));
app.use(morgan('dev'));
app.use((req, res, next) => {
res.locals.path = req.path;
next();
});
app.use(express.json());
app.use(cookieParser());
// app.use(checkUser);
// routes
app.get('*', checkUser);
app.get('/', (req, res) => {
res.render('index', { title: 'Home' });
// res.redirect('/courses');
});
app.get('/courses', requireAuth, (req, res) => {
res.render('courses', { title: 'All Courses' });
});
// course routes
app.use('/courses', requireAuth, courseRoutes);
// auth routes
app.use(authRoutes);
// 404 page
app.use((req, res) => {
res.status(404).render('404', { title: '404'});
})
courseController.js
const Course = require('../models/course');
const course_index = (req, res) => {
Course.find().sort({ createdAt: -1 })
.then(result => {
console.log('Courses:', courses);
res.render('courses', { courses: result, title: 'All courses' });
})
.catch(err => {
console.log(err);
});
}
const course_details = (req, res) => {
const id = req.params.id;
Course.findById(id)
.then(result => {
res.render('details', { course: result, title: 'Course Details' });
})
.catch(err => {
res.status(404).render('404', { title: 'Course not found' });
});
}
const course_create_get = (req, res) => {
res.render('create', { title: 'Create a new course' });
}
const course_create_post = (req, res) => {
const course = new Course(req.body);
course.save()
.then(result => {
res.redirect('/courses');
})
.catch(err => {
console.log(err);
});
}
const course_delete = (req, res) => {
const id = req.params.id;
Course.findByIdAndDelete(id)
.then(result => {
res.json({ redirect: '/courses' });
})
.catch(err => {
console.log(err);
});
}
module.exports = {
course_index,
course_details,
course_create_get,
course_create_post,
course_delete
}
Things were working properly and then I added too much code without testing each addition because my other views were functioning properly. This is the specific error:
ReferenceError: C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwoviewscourses.ejs:11
9|
All Courses
10|
11| <% if (courses.length > 0) { %>
12| <% courses.forEach(course => { %>
13|
14| <a class="single" href="/courses/<%= course._id %>">
courses is not defined
at eval (eval at compile (C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwonode_modulesejslibejs.js:673:12), :18:8)
at courses (C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwonode_modulesejslibejs.js:703:17)
at tryHandleCache (C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwonode_modulesejslibejs.js:274:36)
at exports.renderFile [as engine] (C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwonode_modulesejslibejs.js:491:10)
at View.render (C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwonode_modulesexpresslibview.js:135:8)
at tryRender (C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwonode_modulesexpresslibapplication.js:657:10)
at Function.render (C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwonode_modulesexpresslibapplication.js:609:3)
at ServerResponse.render (C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwonode_modulesexpresslibresponse.js:1039:7)
at C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwoapp.js:43:9
at Layer.handle [as handle_request] (C:UserssnperOneDriveDesktopSDEV 255SDEV_255_Final_Project_Group5_TakeTwonode_modulesexpresslibrouterlayer.js:95:5)
