49 lines
		
	
	
	
		
			1,023 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1,023 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
tags: [backend, node-js, REST, APIs]
 | 
						|
---
 | 
						|
 | 
						|
# Creating a RESTful API: `PUT` requests
 | 
						|
 | 
						|
To demonstrate the handling of PUT requests, we will create a handler that
 | 
						|
updates an element in the course array, based on its `id` and return the updated
 | 
						|
entry:
 | 
						|
 | 
						|
```js
 | 
						|
router.put("/:id", (req, res) => {
 | 
						|
  const course = courses.find((c) => c.id === parseInt(req.params.id));
 | 
						|
 | 
						|
  if (!course)
 | 
						|
    return res.status(404).send("A course with the given ID was not found");
 | 
						|
 | 
						|
  const { error } = validateCourse(req.body);
 | 
						|
 | 
						|
  if (error)
 | 
						|
    return error.details.map((joiErr) => res.status(400).send(joiErr.message));
 | 
						|
 | 
						|
  course.name = req.body.name;
 | 
						|
  res.send(course);
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
Our request:
 | 
						|
 | 
						|
```js
 | 
						|
const updateCourse = async (courseChange) => {
 | 
						|
  try {
 | 
						|
    const resp = await axios.put("http://localhost:3000/api/courses/1", {
 | 
						|
      name: courseChange.name,
 | 
						|
    });
 | 
						|
    console.log(resp.data);
 | 
						|
  } catch (err) {
 | 
						|
    console.error(err);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
updateCourse({ name: "A new course" });
 | 
						|
```
 | 
						|
 | 
						|
Returns:
 | 
						|
 | 
						|
```js
 | 
						|
{ id: 1, name: 'A new course' }
 | 
						|
```
 |