0% found this document useful (0 votes)
50 views6 pages

Exercise 14 - REST API With Express, MongoDB and Mongoose - P2

This document describes how to add support for comments to a REST API built with Express, MongoDB, and Mongoose. It includes code to: 1. Get, post, and delete comments for a dish via the /dishes/:dishId/comments route. 2. Get, update, and delete a specific comment via the /dishes/:dishId/comments/:commentId route. Testing the updated API with Postman is recommended to validate the comment functionality. The changes should then be committed to version control.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
50 views6 pages

Exercise 14 - REST API With Express, MongoDB and Mongoose - P2

This document describes how to add support for comments to a REST API built with Express, MongoDB, and Mongoose. It includes code to: 1. Get, post, and delete comments for a dish via the /dishes/:dishId/comments route. 2. Get, update, and delete a specific comment via the /dishes/:dishId/comments/:commentId route. Testing the updated API with Postman is recommended to validate the comment functionality. The changes should then be committed to version control.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

REST API with Express, MongoDB and Mongoose Part 2

Objectives and Outcomes


In this exercise, you will continue the integration of the REST API server based on the Express
framework that you implemented earlier, together with the Mongoose schema and models to create
a full-fledged REST API server. At the end of this exercise, you will be able to:

 Add support for accessing and updating comments within the dishes.
Exercise Resources
db.json

Handling Comments

 Add the following code to dishRouter.js to handle comments:

 ...

dishRouter.route('/:dishId/comments')

.get((req,res,next) => {

Dishes.findById(req.params.dishId)

.then((dish) => {

if (dish != null) {

res.statusCode = 200;

res.setHeader('Content-Type', 'application/json');

res.json(dish.comments);

else {

err = new Error('Dish ' + req.params.dishId + ' not found');

err.status = 404;

return next(err);

}, (err) => next(err))

.catch((err) => next(err));

})

.post((req, res, next) => {

Dishes.findById(req.params.dishId)

.then((dish) => {
1
if (dish != null) {

dish.comments.push(req.body);

dish.save()

.then((dish) => {

res.statusCode = 200;

res.setHeader('Content-Type', 'application/json');

res.json(dish);

}, (err) => next(err));

else {

err = new Error('Dish ' + req.params.dishId + ' not found');

err.status = 404;

return next(err);

}, (err) => next(err))

.catch((err) => next(err));

})

.put((req, res, next) => {

res.statusCode = 403;

res.end('PUT operation not supported on /dishes/'

+ req.params.dishId + '/comments');

})

.delete((req, res, next) => {

Dishes.findById(req.params.dishId)

.then((dish) => {

if (dish != null) {

for (var i = (dish.comments.length -1); i >= 0; i--) {

dish.comments.id(dish.comments[i]._id).remove();

dish.save()

.then((dish) => {
2
res.statusCode = 200;

res.setHeader('Content-Type', 'application/json');

res.json(dish);

}, (err) => next(err));

else {

err = new Error('Dish ' + req.params.dishId + ' not found');

err.status = 404;

return next(err);

}, (err) => next(err))

.catch((err) => next(err));

});

dishRouter.route('/:dishId/comments/:commentId')

.get((req,res,next) => {

Dishes.findById(req.params.dishId)

.then((dish) => {

if (dish != null && dish.comments.id(req.params.commentId) != null) {

res.statusCode = 200;

res.setHeader('Content-Type', 'application/json');

res.json(dish.comments.id(req.params.commentId));

else if (dish == null) {

err = new Error('Dish ' + req.params.dishId + ' not found');

err.status = 404;

return next(err);

else {

err = new Error('Comment ' + req.params.commentId + ' not found');

err.status = 404;
3
return next(err);

}, (err) => next(err))

.catch((err) => next(err));

})

.post((req, res, next) => {

res.statusCode = 403;

res.end('POST operation not supported on /dishes/'+ req.params.dishId

+ '/comments/' + req.params.commentId);

})

.put((req, res, next) => {

Dishes.findById(req.params.dishId)

.then((dish) => {

if (dish != null && dish.comments.id(req.params.commentId) != null) {

if (req.body.rating) {

dish.comments.id(req.params.commentId).rating = req.body.rating;

if (req.body.comment) {

dish.comments.id(req.params.commentId).comment = req.body.comment;

dish.save()

.then((dish) => {

res.statusCode = 200;

res.setHeader('Content-Type', 'application/json');

res.json(dish);

}, (err) => next(err));

else if (dish == null) {

err = new Error('Dish ' + req.params.dishId + ' not found');

err.status = 404;

return next(err);
4
}

else {

err = new Error('Comment ' + req.params.commentId + ' not found');

err.status = 404;

return next(err);

}, (err) => next(err))

.catch((err) => next(err));

})

.delete((req, res, next) => {

Dishes.findById(req.params.dishId)

.then((dish) => {

if (dish != null && dish.comments.id(req.params.commentId) != null) {

dish.comments.id(req.params.commentId).remove();

dish.save()

.then((dish) => {

res.statusCode = 200;

res.setHeader('Content-Type', 'application/json');

res.json(dish);

}, (err) => next(err));

else if (dish == null) {

err = new Error('Dish ' + req.params.dishId + ' not found');

err.status = 404;

return next(err);

else {

err = new Error('Comment ' + req.params.commentId + ' not found');

err.status = 404;

return next(err);

}
5
}, (err) => next(err))

.catch((err) => next(err));

});


 ...

 Save the changes and start the server. Make sure your MongoDB server is up and running.
 You can now fire up postman and then perform several operations on the REST API. You can
use the data for all the dishes provided in the db.json file given above in the Exercise
Resources to test your server
 Do a Git commit with the message "Express REST API with MongoDB and Mongoose Part 2".
Conclusions
In this exercise you continued to develop the full-fledged REST API server with Express, Mongo and
Mongoose.

You might also like