53 lines
		
	
	
	
		
			1,022 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
	
		
			1,022 B
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								tags:
							 | 
						||
| 
								 | 
							
								  - 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' }
							 | 
						||
| 
								 | 
							
								```
							 |