Skip to content

Commit 28d5e23

Browse files
author
Maitray Suthar
committed
added dotenv, started registration.
1 parent d425dd7 commit 28d5e23

File tree

9 files changed

+141
-14
lines changed

9 files changed

+141
-14
lines changed

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MONGODB_URL=YourConnectionString

app.js

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,24 @@ var express = require('express');
22
var path = require('path');
33
var cookieParser = require('cookie-parser');
44
var logger = require('morgan');
5-
5+
require('dotenv').config()
66
var indexRouter = require('./routes/index');
7-
var usersRouter = require('./routes/users');
8-
7+
var apiRouter = require('./routes/api');
98
var apiResponse = require('./helpers/apiResponse');
109

11-
/* DB connection */
10+
// DB connection
11+
var MONGODB_URL = process.env.MONGODB_URL;
1212
var mongoose = require('mongoose');
13-
14-
var mongoDB = 'mongodb://127.0.0.1/rest-api-nodejs-mongodb';
15-
mongoose.connect(mongoDB, { useNewUrlParser: true }).then(() => {
16-
console.log("Connected to %s", mongoDB);
13+
mongoose.connect(MONGODB_URL, { useNewUrlParser: true }).then(() => {
14+
console.log("Connected to %s", MONGODB_URL);
15+
console.log("App is running ... \n");
16+
console.log("Press CTRL + C to stop the process. \n");
1717
})
1818
.catch(err => {
1919
console.error("App starting error:", err.message);
2020
process.exit(1);
2121
});
2222
var db = mongoose.connection;
23-
// db.on('error', (error)=>{
24-
// //console.error('MongoDB connection error:'error);
25-
// console.error.bind(console, 'MongoDB connection error:')
26-
// process.exit(0);
27-
// });
2823

2924
var app = express();
3025

@@ -34,8 +29,9 @@ app.use(express.urlencoded({ extended: false }));
3429
app.use(cookieParser());
3530
app.use(express.static(path.join(__dirname, 'public')));
3631

32+
//Route Prefixes
3733
app.use('/', indexRouter);
38-
app.use('/users', usersRouter);
34+
app.use('/api/', apiRouter);
3935

4036
// throw 404 if URL not found
4137
app.all("*", function(req, res) {

controllers/AuthController.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
const UserModel = require("../models/UserModel");
2+
const { body,validationResult } = require('express-validator/check');
3+
const { sanitizeBody } = require('express-validator/filter');
4+
var apiResponse = require('../helpers/apiResponse');
5+
6+
exports.register = [
7+
// Validate fields.
8+
body('firstName').isLength({ min: 1 }).trim().withMessage('First name must be specified.')
9+
.isAlphanumeric().withMessage('First name has non-alphanumeric characters.'),
10+
body('lastName').isLength({ min: 1 }).trim().withMessage('Last name must be specified.')
11+
.isAlphanumeric().withMessage('Last name has non-alphanumeric characters.'),
12+
body('email').isLength({ min: 1 }).trim().withMessage('Email must be specified.')
13+
.isEmail().withMessage('Email must be a valid email address.'),
14+
body('password').isLength({ min: 6 }).trim().withMessage('Password must be 6 characters or greater.'),
15+
// Sanitize fields.
16+
sanitizeBody('firstName').escape(),
17+
sanitizeBody('lastName').escape(),
18+
sanitizeBody('email').escape(),
19+
sanitizeBody('password').escape(),
20+
// Process request after validation and sanitization.
21+
(req, res, next) => {
22+
try {
23+
// Extract the validation errors from a request.
24+
const errors = validationResult(req);
25+
// Create User object with escaped and trimmed data
26+
var user = new UserModel(
27+
{
28+
firstName: req.body.firstName,
29+
lastName: req.body.lastName,
30+
email: req.body.email,
31+
password: req.body.password,
32+
}
33+
);
34+
if (!errors.isEmpty()) {
35+
// Display sanitized values/errors messages.
36+
return apiResponse.validationErrorWithData(res, 'Validation Error.', errors.array());
37+
}else {
38+
// Save user.
39+
user.save(function (err) {
40+
if (err) { return apiResponse.ErrorResponse(res, err); }
41+
return apiResponse.successResponseWithData(res,'Registration Success.', user);
42+
});
43+
return;
44+
}
45+
} catch (err) {
46+
return apiResponse.ErrorResponse(res, err);
47+
}
48+
}];

helpers/apiResponse.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,13 @@ exports.notFoundResponse = function (res, msg) {
2929
message: msg,
3030
}
3131
return res.status(404).json(data);
32+
}
33+
34+
exports.validationErrorWithData = function (res, msg, data) {
35+
var data = {
36+
status: 1,
37+
message: msg,
38+
data: data
39+
}
40+
return res.status(400).json(data);
3241
}

models/UserModel.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
var mongoose = require('mongoose');
2+
3+
var UserSchema = new mongoose.Schema({
4+
firstName: {
5+
type: String,
6+
required: true
7+
},
8+
lastName: {
9+
type: String,
10+
required: true
11+
},
12+
email: {
13+
type: String,
14+
required: true
15+
},
16+
password: {
17+
type: String,
18+
required: true
19+
},
20+
status: {
21+
type: Boolean,
22+
required: true,
23+
default: 1,
24+
}
25+
}, {timestamps: true});
26+
27+
// Virtual for user's full name
28+
UserSchema
29+
.virtual('fullName')
30+
.get(function () {
31+
return this.firstName + ' ' + this.lastName;
32+
});
33+
34+
module.exports = mongoose.model('User', UserSchema);

package-lock.json

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
"dependencies": {
1010
"cookie-parser": "~1.4.3",
1111
"debug": "~2.6.9",
12+
"dotenv": "^8.0.0",
1213
"express": "~4.16.0",
14+
"express-validator": "^6.1.1",
1315
"mongoose": "^5.6.6",
1416
"morgan": "~1.9.0"
1517
},

routes/api.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
var express = require('express');
2+
var usersRouter = require('./users');
3+
var authRouter = require('./auth');
4+
5+
var app = express();
6+
7+
app.use('/users/', usersRouter);
8+
app.use('/auth/', authRouter);
9+
10+
module.exports = app;

routes/auth.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
var express = require("express");
2+
const AuthController = require("../controllers/AuthController");
3+
4+
var router = express.Router();
5+
6+
router.post("/register", AuthController.register);
7+
8+
module.exports = router;

0 commit comments

Comments
 (0)