Course 3 is missing

In the HTTP Delete Requests everything is working except for when I use my GET method on Post Man. I’m using http://localhost:3000/api/courses address but after I click Send, course 1 is gone as expected, but so is course 3…

Why is this happening?

Here’s my index.js:

const Joi = require("joi"); // Validation code

const express = require("express");

const app = express();

// Enable json objects from post

app.use(express.json());

const courses = [

       { id: 1, name: "courses1" },

       { id: 2, name: "courses2" },

       { id: 3, name: "courses3" },

  ];

 // Respond to end points

 // Obtain paths using get

app.get("/", (req, res) => {

      res.send("Hello World");

});

app.get("/api/courses", (req, res) => {

    res.send(courses);

});

// Post json data

// Joi version 17

app.post("/api/courses", (req, res) => {

// Validate course update

       const { error } = validateCourse(req.body); // Result.error

  if (error) {

 // Only reveal message, otherwise show all details of error

    res.status(400).send(result.error.details[0].message);

   }

   const course = {

      id: courses.length + 1,

     name: req.body.name,

   };

   // Append new elements

    courses.push(course);

   // Send a response

      res.send(course);

 });

  // Update HTTP Requests

    app.put("/api/courses/:id", (req, res) => {

   // params = parameters ex. year and month

  // query: optional paramters

  //res.send(req.params);

   const course = courses.find((c) => c.id === parseInt(req.params.id));

        if (!course)

         res.status(404).send("The course with the given ID was not found.");

    // Validate course update

       const { error } = validateCourse(req.body); // Result.error

         if (error) {

     // Only reveal message, otherwise show all details of error

        res.status(400).send(error.details[0].message);

          }

    // Update course

        course.name = req.body.name;

  // Return the updated course

         res.send(course);

      });

  // Delete Request

        app.delete("/api/courses/:id", (req, res) => {

       const course = courses.find((c) => c.id === parseInt(req.params.id));

       if (!course)

       res.status(404).send("The course with the given ID was not found.");

   // Delete

        const index = courses.indexOf(course);

    // Go to the index and remove 1 object

    // splice(start: number, deleteCount?: number)

         courses.splice(index, 1);

        res.send(course);

      });

        // Joi version 17

          function validateCourse(course) {

             const schema = Joi.object({

           name: Joi.string().min(3).required(),

         });

        return schema.validate(course);

        }

        // /api/courses/1

      app.get("/api/courses/:id", (req, res) => {

      // params = parameters ex. year and month

     // query: optional paramters

       //res.send(req.params);

          const course = courses.find((c) => c.id === parseInt(req.params.id));

           if (!course)

                 res.status(404).send("The course with the given ID was not found."); // 404

                res.send(course);

       });

    // PORT

   // env: environment variables

  // PORT: environment varoable

   // Use 'set' to create port for environment variable or use 3000

   // set PORT=?

     const port = process.env.PORT || 3000;

   // Apply port in console.log using template literals (strings combined with 
   implanted expressions)

     app.listen(port, () => console.log(`Listening on port ${port}...`));
1 Like

I see where I went wrong… On this one of code I have “result” which no longer relevant.

1 Like