Bird
Raised Fist0
Expressframework~10 mins

DELETE route handling in Express - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - DELETE route handling
Client sends DELETE request
↓
Express matches DELETE route
↓
Route handler runs
↓
Perform delete operation
↓
Send response to client
↓
End
The server listens for DELETE requests, runs the handler to delete data, then sends a response back.
Execution Sample
Express
app.delete('/items/:id', (req, res) => {
  const id = req.params.id;
  deleteItemById(id);
  res.status(200).send(`Deleted item ${id}`);
});
This code deletes an item by id when a DELETE request is received at /items/:id.
Execution Table
StepActionRequest DataOperationResponse Sent
1Receive DELETE /items/42id=42Match route '/items/:id'No response yet
2Extract id from req.paramsid=42id = '42'No response yet
3Call deleteItemById('42')id=42Item 42 deleted from storageNo response yet
4Send response with status 200id=42No operationResponse: 'Deleted item 42'
5End requestid=42No operationResponse sent, connection closed
💡 Request ends after sending response confirming deletion.
Variable Tracker
VariableStartAfter Step 2After Step 3Final
idundefined'42''42''42'
response statusundefinedundefinedundefined200
response bodyundefinedundefinedundefined'Deleted item 42'
Key Moments - 3 Insights
Why do we use req.params.id to get the id?
Because the route is defined with ':id', Express puts that part of the URL into req.params.id as shown in execution_table step 2.
What happens if deleteItemById fails or the id does not exist?
In this simple example, the code assumes success. In real apps, you should check and send error responses. Here, step 3 shows deletion assumed successful.
Why do we send a response after deleting?
HTTP requires a response to end the request. Step 4 sends status 200 and a message so the client knows the delete succeeded.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of 'id' after step 2?
A'42'
Bundefined
Cnull
D'id'
💡 Hint
Check the 'Request Data' and 'Operation' columns at step 2 in the execution_table.
At which step is the response sent back to the client?
AStep 2
BStep 4
CStep 3
DStep 5
💡 Hint
Look at the 'Response Sent' column in the execution_table.
If the route was changed to '/items/delete/:id', which step would change in the execution flow?
AStep 3 - delete operation
BStep 4 - sending response
CStep 1 - route matching
DStep 5 - ending request
💡 Hint
Route matching depends on the URL pattern, see step 1 in execution_table.
Concept Snapshot
DELETE route handling in Express:
- Use app.delete(path, handler) to listen for DELETE requests.
- Access route params via req.params.
- Perform delete logic inside handler.
- Send response with res.status().send() to confirm.
- Always end request with a response.
Full Transcript
In Express, a DELETE route listens for HTTP DELETE requests at a specific path. When a client sends a DELETE request, Express matches the route and runs the handler function. Inside the handler, you get the id from req.params.id, perform the deletion, then send a response back with status 200 and a message confirming the deletion. The request ends after sending the response. This flow ensures the client knows the delete succeeded. Beginners often wonder why we use req.params.id, why we must send a response, and what happens if deletion fails. This example assumes success for simplicity. The key steps are receiving the request, extracting parameters, deleting the item, sending the response, and ending the request.

Practice

(1/5)
1. What is the main purpose of a DELETE route in Express?
easy
A. To update existing data on the server
B. To add new data to the server
C. To remove data from the server
D. To retrieve data from the server

Solution

  1. Step 1: Understand HTTP methods

    HTTP methods define actions: GET retrieves, POST adds, PUT updates, DELETE removes.
  2. Step 2: Identify DELETE route purpose

    DELETE routes specifically handle requests to remove data from the server.
  3. Final Answer:

    To remove data from the server -> Option C
  4. Quick Check:

    DELETE = remove data [OK]
Hint: DELETE routes always remove data from the server [OK]
Common Mistakes:
  • Confusing DELETE with POST or GET
  • Thinking DELETE adds or updates data
  • Assuming DELETE retrieves data
2. Which of the following is the correct syntax to define a DELETE route for path /items/:id in Express?
easy
A. app.delete('/items/:id', (req, res) => { /* handler */ });
B. app.get('/items/:id', (req, res) => { /* handler */ });
C. app.post('/items/:id', (req, res) => { /* handler */ });
D. app.put('/items/:id', (req, res) => { /* handler */ });

Solution

  1. Step 1: Identify HTTP method for deletion

    DELETE method is used to remove resources, so app.delete is correct.
  2. Step 2: Check route path and handler syntax

    The path /items/:id with a callback function matches Express route syntax.
  3. Final Answer:

    app.delete('/items/:id', (req, res) => { /* handler */ }); -> Option A
  4. Quick Check:

    DELETE route syntax = app.delete(path, handler) [OK]
Hint: Use app.delete for DELETE routes, not get/post/put [OK]
Common Mistakes:
  • Using app.get or app.post instead of app.delete
  • Missing the callback function
  • Incorrect path format
3. What will be the response if the following Express DELETE route is called with DELETE /users/5 and the user with id 5 exists?
const users = [{id: 1}, {id: 5}, {id: 9}];
app.delete('/users/:id', (req, res) => {
  const id = Number(req.params.id);
  const index = users.findIndex(u => u.id === id);
  if (index !== -1) {
    users.splice(index, 1);
    res.status(200).send('User deleted');
  } else {
    res.status(404).send('User not found');
  }
});
medium
A. Response status 200 with message 'User deleted'
B. Response status 404 with message 'User not found'
C. Response status 500 with server error
D. Response status 200 with message 'User not found'

Solution

  1. Step 1: Check if user with id 5 exists

    The array contains {id: 5}, so index will not be -1.
  2. Step 2: Analyze response when user found

    Since index !== -1, user is removed and response status 200 with 'User deleted' is sent.
  3. Final Answer:

    Response status 200 with message 'User deleted' -> Option A
  4. Quick Check:

    User exists = 200 'User deleted' [OK]
Hint: If item found, DELETE route sends 200 with success message [OK]
Common Mistakes:
  • Assuming 404 even if user exists
  • Confusing status codes
  • Not converting id to number before comparison
4. Identify the error in this DELETE route code snippet:
app.delete('/products/:id', (req, res) => {
  const id = req.params.id;
  const product = products.find(p => p.id === id);
  if (!product) {
    res.status(404).send('Product not found');
  }
  products = products.filter(p => p.id !== id);
  res.send('Product deleted');
});
medium
A. Incorrect route path syntax
B. Missing callback function in app.delete
C. id is not converted to number before comparison
D. res.send called twice without return

Solution

  1. Step 1: Check flow after 404 response

    If product not found, res.status(404).send is called but code continues without return.
  2. Step 2: Identify multiple responses sent

    After 404 response, code still filters products and calls res.send again, causing error.
  3. Final Answer:

    res.send called twice without return -> Option D
  4. Quick Check:

    Multiple res.send calls without return cause errors [OK]
Hint: Use return after sending response to avoid multiple sends [OK]
Common Mistakes:
  • Not returning after sending 404 response
  • Ignoring type conversion for id
  • Assuming route path is wrong
5. You want to create a DELETE route that removes a book by its ID from a nested data structure where books are grouped by genre. Which approach correctly handles deletion and sends a 404 if the book is not found?
const library = {
  fiction: [{id: 1, title: 'A'}, {id: 2, title: 'B'}],
  nonFiction: [{id: 3, title: 'C'}]
};

app.delete('/books/:id', (req, res) => {
  const id = Number(req.params.id);
  let found = false;
  for (const genre in library) {
    const index = library[genre].findIndex(book => book.id === id);
    if (index !== -1) {
      library[genre].splice(index, 1);
      found = true;
      break;
    }
  }
  if (found) {
    res.status(200).send('Book deleted');
  } else {
    res.status(404).send('Book not found');
  }
});
hard
A. The code does not break after deletion, causing multiple deletions
B. This code correctly deletes the book and handles 404 if not found
C. The code misses converting id to number, causing no matches
D. The code sends 200 status even if book is not found

Solution

  1. Step 1: Check id conversion

    id is converted to Number, ensuring correct comparison with book ids.
  2. Step 2: Verify loop and deletion logic

    Loop checks each genre, finds book by id, deletes it, sets found true, and breaks loop to avoid extra deletions.
  3. Step 3: Confirm response handling

    If found is true, sends 200 with 'Book deleted'; else sends 404 with 'Book not found'.
  4. Final Answer:

    This code correctly deletes the book and handles 404 if not found -> Option B
  5. Quick Check:

    Proper id conversion, deletion, and response = correct code [OK]
Hint: Convert id, break loop after deletion, send 404 if not found [OK]
Common Mistakes:
  • Not converting id to number before comparison
  • Not breaking loop after deletion
  • Sending success response even if book missing
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard