Skip to content

Commit 5809b52

Browse files
committed
made a error handler helper file
1 parent e2cf96d commit 5809b52

File tree

5 files changed

+124
-60
lines changed

5 files changed

+124
-60
lines changed

_helper/error-handler.js

+16-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
1-
module.exports = {
2-
errorHandler: function(err,req,res,next){
3-
if(typeof(err)==="string"){
4-
return res.status(400).json({message:err});
5-
}
6-
// return res.status(500).json({message:err.message});
7-
return next;
1+
class ErrorHandler extends Error {
2+
constructor(statusCode, message) {
3+
super();
4+
this.statusCode = statusCode;
5+
this.message = message;
86
}
7+
}
8+
module.exports = {
9+
ErrorHandler,
10+
errorHandler: (err, res) => {
11+
const { statusCode, message } = err;
12+
res.status(statusCode).json({
13+
status: "error",
14+
statusCode,
15+
message
16+
});
17+
}
918
}

app.js

+10-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var cors = require('cors')
77

88
var orgsRouter = require('./routes/orgs/');
99
var usersRouter = require('./routes/users/');
10-
// const {errorHandler} = require('./_helper/error-handler');
10+
const {errorHandler,ErrorHandler} = require('./_helper/error-handler');
1111

1212
var app = express();
1313

@@ -21,15 +21,22 @@ app.use(express.json());
2121
app.use(express.urlencoded({ extended: false }));
2222
app.use(cookieParser());
2323
app.use(express.static(path.join(__dirname, 'public')));
24-
// app.use(errorHandler())
2524

2625
app.use('/orgs', orgsRouter);
2726
app.use('/users', usersRouter);
2827

28+
app.get('/error', (req, res) => {
29+
throw new ErrorHandler(500, 'Internal server error');
30+
})
31+
2932
app.get('/',(req,res)=>{
30-
res.sendStatus(200).send({message:"end point test"})
33+
res.render('index',{title:"Codebadge Backend API"})
3134
})
3235

36+
app.use((err, req, res, next) => {
37+
errorHandler(err, res);
38+
});
39+
3340
// catch 404 and forward to error handler
3441
app.use(function(req, res, next) {
3542
next(createError(404));

routes/orgs/index.js

-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@ var express = require('express');
22
var router = express.Router();
33
const githubAPI = require('./githubAPI');
44

5-
/* GET users listing. */
65
router.use('/github',githubAPI);
76
module.exports = router;

routes/users/codebadge-local.js

+51-25
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const bcrypt = require('bcrypt');
44
const saltRounds = 10;
55
var {get} = require('axios')
66
var User = require('../../models/Users.js')
7-
7+
let {errorHandler,ErrorHandler} = require('./../../_helper/error-handler')
88
function makeid(length) {
99
var result = '';
1010
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
@@ -19,38 +19,55 @@ router.get('/', function(req, res, next) {
1919
res.send('respond with a resource');
2020
});
2121

22-
router.post('/login',(req,res)=>{
23-
var username = req.body.username;
24-
var password = req.body.password;
25-
26-
User.find({username:username},{username:1,password:1,type:1,_id:0},(err,user)=>{
27-
if(user.length==0){
28-
res.sendStatus(404).send("Not Found")
29-
}
22+
router.post('/login',async (req,res,next)=>{
23+
try{
24+
var username = req.body.username;
25+
var password = req.body.password;
26+
console.log(username,password)
27+
if(username=="" || password==""){throw new ErrorHandler(400, 'Username and Password required')}
3028
else{
31-
bcrypt.compare(password, user[0].password, function(err, result) {
32-
// result == true
33-
if(result===true)
34-
console.log(user)
35-
res.cookie('token',makeid(16))
36-
res.cookie('username',user[0].username)
37-
res.cookie('githubLogin',false)
38-
console.log(user[0].type)
39-
if(user[0].type=="User"){
40-
res.redirect(`http://localhost:3000/user?username=${username}`)
41-
}
42-
else{
43-
res.redirect(`http://localhost:3000/org?username=${username}`)
29+
console.log(username)
30+
await User.find({username:username},{username:1,password:1,type:1,_id:0},(err,user)=>{
31+
try{
32+
if(user.length==0){
33+
throw new ErrorHandler(404, 'Username not found');
34+
}
35+
else{
36+
bcrypt.compare(password, user[0].password, function(err, result) {
37+
// result == true
38+
if(!result){throw new ErrorHandler(401, 'Incorrect password');}
39+
else{
40+
console.log(user)
41+
res.cookie('token',makeid(16))
42+
res.cookie('username',user[0].username)
43+
res.cookie('githubLogin',false)
44+
console.log(user[0].type)
45+
if(user[0].type=="User"){
46+
res.redirect(`http://localhost:3000/user?username=${username}`)
47+
}
48+
else{
49+
res.redirect(`http://localhost:3000/org?username=${username}`)
50+
}
51+
}
52+
});
53+
}
54+
next();
4455
}
45-
});
56+
catch(error){next(error);}
57+
})
58+
}
4659
}
47-
})
60+
catch(error){
61+
next(error);
62+
}
4863
})
4964

5065
router.post('/signup',(req,res)=>{
66+
try{
5167
var fullname = req.body.fullname
5268
var username = req.body.username;
5369
var password = req.body.password;
70+
if(username=="" || password=="" || fullname==""){throw new ErrorHandler(400, 'Username,Fullname and Password required')}
5471
bcrypt.genSalt(saltRounds, function(err, salt) {
5572
bcrypt.hash(password, salt, function(err, hash) {
5673

@@ -63,7 +80,7 @@ router.post('/signup',(req,res)=>{
6380
}
6481
User.find({username:username},(err,users)=>{
6582
if(users.length!==0){
66-
res.sendStatus(409).send("user already exist");
83+
throw new ErrorHandler(409, 'User already exists');
6784
}
6885
else{
6986
console.log(user)
@@ -96,6 +113,15 @@ router.post('/signup',(req,res)=>{
96113
})
97114
});
98115
});
116+
next();
117+
}
118+
catch(error){
119+
next(error);
120+
}
99121
})
100122

123+
router.use((err, req, res, next) => {
124+
errorHandler(err, res);
125+
});
126+
101127
module.exports = router;

routes/users/githubAPI.js

+47-24
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,32 @@ var session = require('express-session')
55
const {github} = require('./../../config/config')
66
var clientId=github.clientId
77
var clientSecret=github.clientSecret
8-
9-
router.get('/getUserProfile',(req,res)=>{
8+
let {ErrorHandler,errorHandler} = require('../../_helper/error-handler')
9+
router.get('/getUserProfile',(req,res,next)=>{
1010
username = req.query.username
1111
get(`https://api.github.com/users/${username}`)
1212
.then(resp => {
1313
res.send(resp.data)
1414
})
15-
.catch(err=>res.json({"error":err}))
15+
.catch(err=>{
16+
throw new ErrorHandler(404,`${username} is not a valid username`)
17+
})
18+
.catch(error=>next(error))
1619
})
1720

18-
router.get('/getUserOrgs',(req,res)=>{
21+
router.get('/getUserOrgs',(req,res,next)=>{
1922
oauth_token=req.query.token
2023
username=req.query.username
2124
githubLogin=req.query.githubLogin
22-
console.log(githubLogin)
23-
console.log("username",req.query.username)
2425
if(githubLogin=="false"){
25-
console.log("! githubLogin is ",githubLogin)
2626
get(`https://api.github.com/users/${username}/orgs`)
2727
.then(resp => {
2828
res.send(resp.data)
2929
})
30-
.catch(err=>res.json({"error":err}))
30+
.catch(err=>{
31+
throw new ErrorHandler(404,`${username} is not a valid username`)
32+
})
33+
.catch(error=>next(error))
3134
}
3235
else{
3336
console.log("githubLogin",githubLogin)
@@ -36,7 +39,6 @@ router.get('/getUserProfile',(req,res)=>{
3639
"Authorization":`token ${oauth_token}`,
3740
}
3841
}
39-
console.log(config)
4042
get(`https://api.github.com/user/orgs`,config=config)
4143
.then(resp => {
4244
console.log(resp.data.length)
@@ -68,11 +70,14 @@ router.get('/getUserProfile',(req,res)=>{
6870
res.send(list_orgs)
6971
})
7072
})
71-
.catch(err=>{console.log(err);res.json({"error":err})})
73+
.catch(err=>{
74+
throw new ErrorHandler(err.response.status,err.response.statusText)
75+
})
76+
.catch(error=>next(error))
7277
}
7378
})
7479

75-
router.get('/getUserRepos',(req,res)=>{
80+
router.get('/getUserRepos',(req,res,next)=>{
7681
oauth_token = req.query.token
7782
let config = {
7883
headers: {
@@ -86,18 +91,24 @@ router.get('/getUserProfile',(req,res)=>{
8691
.then(resp => {
8792
res.send(resp.data)
8893
})
89-
.catch(err=>res.json({"error":err}))
94+
.catch(err=>{
95+
throw new ErrorHandler(err.response.status,err.response.statusText)
96+
})
97+
.catch(error=>next(error))
9098
}
9199
else{
92100
get(`https://api.github.com/user/repos`,config=config)
93101
.then(resp => {
94102
res.send(resp.data)
95103
})
96-
.catch(err=>res.json({"error":err}))
104+
.catch(err=>{
105+
throw new ErrorHandler(err.response.status,err.response.statusText)
106+
})
107+
.catch(error=>next(error))
97108
}
98109
})
99110

100-
router.get('/getUserData',(req,res)=>{
111+
router.get('/getUserData',(req,res,next)=>{
101112
var oauth_token=req.query.token;
102113
var username=req.query.username;
103114
var githubLogin = req.query.githubLogin;
@@ -113,7 +124,10 @@ router.get('/getUserProfile',(req,res)=>{
113124
res.cookie('username',resp.data["login"],{expires: new Date(Date.now() + + 315360000000)}) //saves username for upcoming queries of logedin user
114125
res.json(resp.data)
115126
})
116-
.catch(err=>res.sendStatus(400).json({"error":err}))
127+
.catch(err=>{
128+
throw new ErrorHandler(err.response.status,err.response.statusText)
129+
})
130+
.catch(error=>next(error))
117131
}
118132
else{
119133
console.log("not github login")
@@ -122,11 +136,14 @@ router.get('/getUserProfile',(req,res)=>{
122136
res.cookie('username',resp.data["login"],{expires: new Date(Date.now() + + 315360000000)}) //saves username for upcoming queries of logedin user
123137
res.json(resp.data)
124138
})
125-
.catch(err=>res.json({"error":err}))
139+
.catch(err=>{
140+
throw new ErrorHandler(err.response.status,err.response.statusText)
141+
})
142+
.catch(error=>next(error))
126143
}
127144
})
128145

129-
router.get('/auth',(req,res)=>{
146+
router.get('/auth',(req,res,next)=>{
130147
const body = {
131148
client_id: clientId,
132149
client_secret: clientSecret,
@@ -175,16 +192,22 @@ router.get('/auth',(req,res)=>{
175192
res.redirect(`http://localhost:3000/org?username=${resp.data["login"]}`)
176193
}
177194
})
178-
.catch(err=>res.sendStatus(400).json({"error":err}))
179-
}).
180-
catch(err => {
181-
res.status(500).json({"error":err});
182-
});
195+
.catch(err=>{
196+
throw new ErrorHandler(err.response.status,err.response.statusText)
197+
})
198+
.catch(error=>next(error))
199+
})
200+
.catch(err=>{
201+
throw new ErrorHandler(err.response.status,err.response.statusText)
202+
})
203+
.catch(error=>next(error))
183204
})
184205

185-
router.get('/',(req,res)=>{
206+
router.get('/',(req,res,next)=>{
186207
res.redirect(`https://github.com/login/oauth/authorize?client_id=${clientId}&scope=user`);
187208
})
188-
209+
router.use((err, req, res, next) => {
210+
errorHandler(err, res);
211+
});
189212

190213
module.exports = router

0 commit comments

Comments
 (0)