seperate folders for client and server

This commit is contained in:
Priyatham-sai-chand 2021-03-18 07:14:15 +05:30 committed by Priyatham Sai Chand
parent 5867a8254b
commit 581b1bf7aa
7 changed files with 1817 additions and 0 deletions

23
config/connectToDb.js Normal file
View File

@ -0,0 +1,23 @@
const mongoose = require("mongoose");
const config = require('config');
const connectToDb = async () => {
try{
await mongoose.connect(
config.get('mongoURI'),
{
useCreateIndex:true,
useFindAndModify:true,
useUnifiedTopology:true,
useNewUrlParser: true
}
)
console.log("mongo connection secure!");
} catch(error){
console.log(error);
process.exit(1);
}
}
module.exports = connectToDb;

4
config/default.json Normal file
View File

@ -0,0 +1,4 @@
{
"mongoURI": "mongodb+srv://admin:ABxXFUBs5FMiAaDJ@form.iynew.mongodb.net/<dbname>?retryWrites=true&w=majority",
"jwtSecret": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}

25
middleware/auth.js Normal file
View File

@ -0,0 +1,25 @@
const jwt = require("jsonwebtoken");
const config = require("config");
const auth = (req, res, next) => {
try {
const token = req.header("x-auth-token");
if (!token)
return res
.status(401)
.json({ msg: "No authentication token, authorization denied." });
const verified = jwt.verify(token, config.get("jwtSecret") );
if (!verified)
return res
.status(401)
.json({ msg: "Token verification failed, authorization denied." });
req.user = verified.id;
next();
} catch (err) {
res.status(500).json({ error: err.message });
}
};
module.exports = auth;

1586
package-lock.json generated

File diff suppressed because it is too large Load Diff

113
routes/users.js Normal file
View File

@ -0,0 +1,113 @@
const router = require("express").Router();
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const auth = require("../middleware/auth");
const User = require("../schemas/User");
const config = require("config");
router.post("/register", async (req, res) => {
try {
let { username,email,phonenumber,password} = req.body;
if (!email || !password )
return res.status(400).json({ msg: "Not all fields have been entered." });
if (password.length < 5)
return res
.status(400)
.json({ msg: "The password needs to be at least 5 characters long." });
const existingUser = await User.findOne({ email: email });
if (existingUser)
return res
.status(400)
.json({ msg: "An account with this email already exists." });
if (!username) username = email;
const salt = await bcrypt.genSalt();
const passwordHash = await bcrypt.hash(password, salt);
const newUser = new User({
username,
email,
phonenumber,
password: passwordHash,
});
const savedUser = await newUser.save();
res.json(savedUser);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
router.post("/login", async (req, res) => {
try {
const { email, password } = req.body;
// validate
if (!email || !password)
return res.status(400).json({ msg: "Not all fields have been entered." });
const user = await User.findOne({ email: email });
if (!user)
return res
.status(400)
.json({ msg: "No account with this email has been registered." });
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) return res.status(400).json({ msg: "Invalid credentials." });
const token = jwt.sign({ id: user._id },config.get('jwtSecret'));
if(token) return res
.json({
token,
user: {
id: user._id,
username: user.username,
},
});
} catch (err) {
res.status(500).json({ error: err.message });
}
});
router.delete("/delete", auth, async (req, res) => {
try {
const deletedUser = await User.findByIdAndDelete(req.user);
res.json(deletedUser);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
router.post("/tokenIsValid", async (req, res) => {
try {
const token = req.header("x-auth-token");
if (!token) return res.json({error: message});
const verified = jwt.verify(token, config.get("jwtSecret"));
if (!verified) return res.json({error: message});
const user = await User.findById(verified.id);
if (!user) return res.json({error: message});
return res.json(true);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
router.get("/", auth, async (req, res) => {
const user = await User.findById(req.user);
console.log(user);
res.json({
username: user.username,
id: user._id,
});
});
module.exports = router;

33
schemas/User.js Normal file
View File

@ -0,0 +1,33 @@
const mongoose = require('mongoose');
const UserSchema = mongoose.Schema({
username: {
type: String,
required: true
},
email: {
type: String,
required:true,
unique: true
},
phonenumber: {
type: Number,
required: true
},
password: {
type:String,
required:true,
minlength: 5
},
pricing: {
type:String,
enum: ['free','basic','intermediate','luxury'],
default:'free',
required:false
}
});
module.exports = User = mongoose.model('user',UserSchema);

33
server.js Normal file
View File

@ -0,0 +1,33 @@
const express = require("express");
const config = require("config");
const mongoose = require("mongoose");
const cors = require("cors");
// set up express
const app = express();
app.use(express.json());
app.use(cors());
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`The server has started on port: ${PORT}`));
// set up mongoose
mongoose.connect(
config.get('mongoURI'),
{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
},
(err) => {
if (err) throw err;
console.log("MongoDB connection established");
}
);
// set up routes
app.use("/users", require("./routes/users"));