Skip to content

Commit aed43d8

Browse files
clean up handling validation errors
1 parent 3f4f55b commit aed43d8

4 files changed

Lines changed: 17 additions & 19 deletions

File tree

src/routes/course.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ router.get('/:courseId', (req, res, next) => {
3232
.populate({path: 'reviews',
3333
populate: {path: 'user'}})
3434
.exec((err, course) => {
35-
if(err) return next(err);
35+
if(err) return Utils.propagateError(err, 400, next);
3636
res.locals.course = course;
3737
let status = 200;
3838
return res.status(status).json({success: true, message: "Course Successfully retrieved!", status: status, course: res.locals.course });
@@ -44,7 +44,7 @@ PUT Routes
4444
*/
4545
router.put('/:courseId', authorizeUser, (req, res, next) => {
4646
Course.findByIdAndUpdate(req.params.courseId, req.body, (err, course) => {
47-
if(err) return next(err);
47+
if(err) return Utils.propagateError(err, 400, next);
4848
let status = 204;
4949
return res.status(status).json({}); //Send status 204 and no content..
5050
});
@@ -59,7 +59,7 @@ router.post('/', authorizeUser, (req, res, next) => {
5959
}
6060
const courseData = req.body;
6161
Course.create(courseData, (err, course) => {
62-
if(err) return next(err);
62+
if(err) return Utils.propagateError(err, 400, next);
6363
let status = 201;
6464
return res.status(status).json({success: true, message: "Course Successfully added!", status: status, course});
6565
});
@@ -68,12 +68,12 @@ router.post('/', authorizeUser, (req, res, next) => {
6868
router.post('/:courseId/reviews', authorizeUser, (req, res, next) => {
6969
let review = new Review(req.body);
7070
review.save((err) => {
71-
if(err) return next(err);
71+
if(err) return Utils.propagateError(err, 400, next);
7272
Course.findById(req.params.courseId, (err, course) => {
73-
if(err) return next(err);
73+
if(err) return Utils.propagateError(err, 400, next);
7474
course.reviews.push(review._id);
7575
course.save((err) => {
76-
if(err) return next(err);
76+
if(err) return Utils.propagateError(err, 400, next);
7777
let status = 201;
7878
res.location('/api/courses/'+req.params.courseId);
7979
return res.status(status).json({}); //Supposed to return no content. therefore no json.

src/routes/user.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@ router.get('/', authorizeUser, (req, res, next) => {
1010
return Utils.throwError(401, "Invalid or missing SessionId", next);
1111
}
1212
User.findById(req.session.userId)
13-
.exec((error, user) => {
14-
if(error){
15-
return next(error);
16-
}
13+
.exec((err, user) => {
14+
if(err) return Utils.propagateError(err, 400, next);
1715
let status = 200;
1816
res.status(status).json({success: true, message: "User Successfully retrieved", status: status, user: user});
1917
});
@@ -30,14 +28,10 @@ router.post('/', (req, res, next) => {
3028
return Utils.throwError(400, "Malformed Email Supplied", next);
3129
}
3230
User.userExist(req.body.emailAddress, (err) => {
33-
if(err){
34-
return next(err);
35-
}
31+
if(err) return Utils.propagateError(err, 409, next);
3632
const userData = req.body;
3733
User.create(userData, (err, user) => {
38-
if (err) {
39-
return next(err);
40-
}
34+
if(err) return Utils.propagateError(err, 400, next);
4135
res.location('/');
4236
return res.status(201).json({success: true, message: "User Successfully added!", status: 201, user});
4337
});

src/utils.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@ export default class Utils {
44
err.status = status;
55
return next(err);
66
}
7+
static propagateError(err, status, next){
8+
err.status = status;
9+
return next(err);
10+
}
711
}

test/course_test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,18 +202,18 @@ describe('Courses', () => {
202202
it('should not POST when review has out of bounds rating', (done) => {
203203
let badReview = review;
204204
badReview.rating = 20;
205-
failPostReview(500, "Review validation failed: rating: Path `rating` (20) is more than maximum allowed value (5).", courseId, validAuth, badReview, done);
205+
failPostReview(400, "Review validation failed: rating: Path `rating` (20) is more than maximum allowed value (5).", courseId, validAuth, badReview, done);
206206
});
207207

208208
it('should not POST when rating is missing', (done) => {
209209
let badReview = review;
210210
badReview.rating = null;
211-
failPostReview(500, "Review validation failed: rating: Path `rating` is required.", courseId, validAuth, badReview, done);
211+
failPostReview(400, "Review validation failed: rating: Path `rating` is required.", courseId, validAuth, badReview, done);
212212
});
213213

214214
it('should not POST when not supplied with a review', (done) => {
215215
let badReview = {};
216-
failPostReview(500, "Review validation failed: rating: Path `rating` is required.", courseId, validAuth, badReview, done);
216+
failPostReview(400, "Review validation failed: rating: Path `rating` is required.", courseId, validAuth, badReview, done);
217217
});
218218

219219
function successPostReview(courseId, auth, review, done) {

0 commit comments

Comments
 (0)