Step 13

Let's include a route to update a note.

Update Note
HTTP MethodPUT
API Endpoint/api/notes/:noteId
Request Path ParameternoteId
Request Query Parameter
Request BodyJSON object (note attributes)
Response BodyJSON object (updated note)
Response Status200

Similar to how we updated NoteDao.create to provide input validation, we must update NoteDao.update method:

update(id, content, author) {
  if (!content || !author) {
    throw new Error("Invalid attributes");
  }
  
  const index = this.notes.findIndex((note) => note._id === id);
  if (index !== -1) {
    this.notes[index].content = content;
    this.notes[index].author = author;
    return this.notes[index];
  }
  return null;
}

Add the following route to index.js:

app.put("/api/notes/:id", (req, res) => {
  const id = Number.parseInt(req.params.id);
  const content = req.body.content;
  const author = req.body.author;

  try {
    const note = notes.update(id, content, author);
    if (note) {
      res.json(note);
    } else {
      res.status(404).send("Resource not found!");
    }
  } catch (error) {
    res.status(400).send(error.message);
  }
});

Notice I set two error status code: (400) for invalid request and (404) for invalid ID number (resource not found).

In Postman, test this endpoint by attempting to update a note that exist.

Also, test by requesting to update a note that does not exist.

Finally, test the endpoint with insufficient or invalid attributes.