Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
PORT=3000
PORT=3000
MONGODB_URI="mongodb+srv://irshadmdk99:irshamongo@cluster0.dapdax3.mongodb.net/lab-express-drones"
12 changes: 6 additions & 6 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ require('dotenv/config');
// ℹ️ Connects to the database
require('./db');

// Handles http requests (express is node js framework)
// Handles HTTP requests (Express is Node.js framework)
// https://www.npmjs.com/package/express
const express = require('express');

Expand All @@ -20,16 +20,16 @@ require('./config')(app);

// default value for title local
const projectName = 'lab-express-drones';
const capitalized = string => string[0].toUpperCase() + string.slice(1).toLowerCase();
const capitalized = (string) => string[0].toUpperCase() + string.slice(1).toLowerCase();

app.locals.title = `${capitalized(projectName)}- Generated with Rootlauncher`;
app.locals.title = `${capitalized(projectName)} - Generated with Rootlauncher`;

// 👇 Start handling routes here
const index = require('./routes/index');
app.use('/', index);
app.use('/', index); // Handles homepage routes

const droneRoutes = require('./routes/drones')
app.use('/', droneRoutes)
const droneRoutes = require('./routes/drones');
app.use('/drones', droneRoutes); // All drone-related routes will use `/drones`

// ❗ To handle errors. Routes that don't exist or errors that you handle in specific routes
require('./error-handling')(app);
Expand Down
2 changes: 1 addition & 1 deletion db/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const mongoose = require("mongoose");
// If no env has been set, we dynamically set it to whatever the folder name was upon the creation of the app

const MONGO_URI = process.env.MONGODB_URI || "mongodb://localhost/lab-express-drones";

mongoose.set('strictQuery', true);
mongoose
.connect(MONGO_URI)
.then((x) => {
Expand Down
12 changes: 11 additions & 1 deletion models/Drone.model.js
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
// Iteration #1
// Iteration #1
const mongoose = require('mongoose');
const { Schema, model } = mongoose;

const droneSchema = new Schema({
name: String,
propellers: Number,
maxSpeed: Number
});

module.exports = model('Drone', droneSchema);
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
},
"dependencies": {
"cookie-parser": "^1.4.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"dotenv": "^8.6.0",
"express": "^4.21.2",
"hbs": "^4.1.1",
"mongoose": "^6.1.2",
"mongoose": "^6.13.5",
"morgan": "^1.10.0",
"serve-favicon": "^2.5.0"
},
Expand Down
71 changes: 47 additions & 24 deletions routes/drones.js
Original file line number Diff line number Diff line change
@@ -1,36 +1,59 @@
const express = require('express');
const router = express.Router();

// require the Drone model here

router.get('/drones', (req, res, next) => {
// Iteration #2: List the drones
// ... your code here
const Drone = require('../models/Drone.model');

// List all drones
router.get('/', async (req, res, next) => {
try {
const drones = await Drone.find();
res.render('drones/list', { drones });
} catch (error) {
console.error('Error retrieving drones:', error);
next(error);
}
});

router.get('/drones/create', (req, res, next) => {
// Iteration #3: Add a new drone
// ... your code here
// Create a new drone
router.get('/create', (req, res) => res.render('drones/create-form'));
router.post('/create', async (req, res, next) => {
try {
await Drone.create(req.body);
res.redirect('/drones');
} catch (error) {
console.error('Error creating drone:', error);
res.render('drones/create-form');
}
});

router.post('/drones/create', (req, res, next) => {
// Iteration #3: Add a new drone
// ... your code here
// Update a drone
router.get('/:id/edit', async (req, res, next) => {
try {
const drone = await Drone.findById(req.params.id);
res.render('drones/update-form', { drone });
} catch (error) {
console.error('Error fetching drone:', error);
next(error);
}
});

router.get('/drones/:id/edit', (req, res, next) => {
// Iteration #4: Update the drone
// ... your code here
});

router.post('/drones/:id/edit', (req, res, next) => {
// Iteration #4: Update the drone
// ... your code here
router.post('/:id/edit', async (req, res, next) => {
try {
await Drone.findByIdAndUpdate(req.params.id, req.body);
res.redirect('/drones');
} catch (error) {
console.error('Error updating drone:', error);
res.render('drones/update-form', { drone: req.body });
}
});

router.post('/drones/:id/delete', (req, res, next) => {
// Iteration #5: Delete the drone
// ... your code here
// Delete a drone
router.post('/:id/delete', async (req, res, next) => {
try {
await Drone.findByIdAndDelete(req.params.id);
res.redirect('/drones');
} catch (error) {
console.error('Error deleting drone:', error);
next(error);
}
});

module.exports = router;
20 changes: 20 additions & 0 deletions seeds/drones.seed.js
Original file line number Diff line number Diff line change
@@ -1 +1,21 @@
// Iteration #1
const mongoose = require('mongoose');
const Drone = require('../models/Drone.model');

const drones = [
{ name: 'Creeper XL 500', propellers: 3, maxSpeed: 12 },
{ name: 'Racer 57', propellers: 4, maxSpeed: 20 },
{ name: 'Courier 3000i', propellers: 6, maxSpeed: 18 }
];

const MONGO_URI = process.env.MONGODB_URI || 'mongodb://localhost/drone-management';

mongoose
.connect(MONGO_URI)
.then(async () => {
await Drone.deleteMany(); // Clear existing data
const createdDrones = await Drone.create(drones);
console.log(`Seeded ${createdDrones.length} drones.`);
mongoose.disconnect();
})
.catch(err => console.error('Error seeding drones:', err));