Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ POST=3000
MONGO_URL=mongodb://localhost:27017/test
ACCESS_TOKEN_SECRET=7bc78545b1a3923cc1e1e19523fd5c3f20b409509
TOKEN_EXPIRE=6d
NODE_ENV=test
NODE_ENV=test
ACCESS_TOKEN_SECRET=sdfasdf
10 changes: 10 additions & 0 deletions app/controllers/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const Auth = require('../middlewares/auth');
module.exports = {
login: (req, res) => {
const token = Auth.generateAccessToken(req.body);
res.json({token});
},
register: (req, res) => {

}
};
40 changes: 30 additions & 10 deletions app/controllers/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,41 @@ const userService = require('../services/user');
module.exports = {
create: async (req, res) => {
//const {name, gender, phone, email} = req.body;
const user = await userService.create(req.body);
res.send(user);
try {
const {result, error} = await userService.create(req.body);
if(error){
res.error(error);
} else {
res.success(result);
}
} catch (error) {
res.error(error);
}
},
read: async (req, res) => {
const user = await userService.read();
res.send(user);
const {result, error} = await userService.read();
if(error)
res.error(error);
res.success(result);
},
update: async (req, res) => {
const id = req.params.id;
const user = await userService.update(id, req.body);
res.send(user);
try {
const id = req.params.id;
const {result, error} = await userService.update(id, req.body);
if(error) {
res.error(error);
} else {
res.success(result);
}
} catch (error) {
res.error(error);
}
},
delete: async (req, res) => {
const id = req.params.id;
const user = await userService.delete(id);
res.send(user);
const {result, error} = await userService.delete(id);
if(error)
res.error(error);
res.success(result);
}
};
};
22 changes: 22 additions & 0 deletions app/helpers/customError.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
class ValidationError extends Error {
constructor(message, meta = {}) {
super(message); // (1)
this.status = "error";
this.statusCode = this.code;
this.data = null;
this.meta = meta;
this.name = "ValidationError"; // (2)
};
}

function test() {
throw new ValidationError("Whoops!");
}

try {
test();
} catch(err) {
alert(err.message); // Whoops!
alert(err.name); // ValidationError
alert(err.stack); // a list of nested calls with line numbers for each
}
20 changes: 20 additions & 0 deletions app/helpers/error.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module.exports = {
notFound: (req, res, next) => {
const error = {
error: 'Not Found',
status: 404
}
res.status(404).send(error);
},
error500: (error, req, res, next) => {
res.status(error.status || 500).send({
status: 'error',
statusCode: error.status || 500,
data: null,
error: {
status: error.status || 500,
message: error.message || 'Internal Server Error'
}
})
}
};
23 changes: 23 additions & 0 deletions app/helpers/response.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module.exports = {
response: (req, res, next) => {
res.error = (err, status = 400, meta = {}) => {
return res.status(status || 400).json({
status: 'error',
statusCode: status || 400,
data: null,
meta: meta,
error: err.error || err.errors || err
});
};
res.success = (data, status = 200, meta = {}) => {
return res.status(status || 200).json({
status: 'success',
statusCode: status || 200,
data: data,
meta: meta,
error: null
});
};
next();
}
};
20 changes: 20 additions & 0 deletions app/middlewares/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
const jwt = require("jsonwebtoken");

module.exports = {
authenticateToken: (req, res, next) => {
// Gather the jwt access token from the request header
const authHeader = req.headers['authorization']
const token = authHeader && authHeader.split(' ')[1]
if (token == null) return res.sendStatus(401) // if there isn't any token

jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
console.log('error jwt :', err)
if (err) return res.sendStatus(403)
req.user = user
next() // pass the execution off to whatever request the client intended
})
},
generateAccessToken: (data) => {
return jwt.sign(data, process.env.ACCESS_TOKEN_SECRET, { expiresIn: process.env.TOKEN_EXPIRE });
}
};
6 changes: 6 additions & 0 deletions app/routes/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const authController = require('../controllers/auth');

module.exports = (route) => {
route.post('/login', authController.login);
route.post('/register', authController.register);
};
6 changes: 6 additions & 0 deletions app/routes/public.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const app = require('express');
const route = app.Router();

require('./auth')(route);

module.exports = route;
9 changes: 4 additions & 5 deletions app/services/user.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const User = require('../models/user');
const { json } = require('body-parser');

module.exports = {
create: async (data) => {
Expand All @@ -11,14 +10,14 @@ module.exports = {
phone: phone,
email: email
});
return user;
return ({result: user});
} catch (error) {
return ({error});
}
},
read: async () => {
const user = await User.find({});
return user;
return ({result: user});
},
update: async (id, data) => {
try {
Expand All @@ -29,15 +28,15 @@ module.exports = {
user.phone = phone;
user.email = email;
await user.save();
return user;
return ({result: user});
} catch (error) {
return ({error});
}
},
delete: async (id) => {
try {
const user = await User.deleteOne({_id: id});
return user;
return ({result: user});
} catch (error) {
return ({error});
}
Expand Down
2 changes: 1 addition & 1 deletion globalConfig.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"mongoUri":"mongodb://127.0.0.1:54025/ae2a0e88-796e-4ff1-8538-6a59d70cbfaf?"}
{"mongoUri":"mongodb://127.0.0.1:64945/6bbb1b4c-2327-4106-99f3-f93a4abce954?"}
23 changes: 17 additions & 6 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,28 @@
const express = require('express')
const app = express()
require('dotenv').config()
const port = process.env.POST
const route = require('./app/routes/index');
const routePub = require('./app/routes/public');
const bodyParser = require('body-parser');
const auth = require('./app/middlewares/auth');
const error = require('./app/helpers/error');
const {response} = require('./app/helpers/response');

const app = express()
require('dotenv').config()
require('./config/database.config').connect();
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.use(response);

app.get('/', (req, res) => {
res.send('Hello World!')
})
app.use('/api/v1', route);
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
app.use('', routePub);
app.use('/api/v1', auth.authenticateToken, route);

app.use(error.error500);
app.use(error.notFound);

app.listen(process.env.POST, () => {
console.log(`Example app listening at http://localhost:${process.env.POST}`)
})
Loading