Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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-
varmongoDB='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)

AltStyle によって変換されたページ (->オリジナル) /