-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
135 lines (108 loc) · 4 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
const { MongoClient, ServerApiVersion, ObjectId } = require('mongodb');
const express = require('express');
const app = express();
var cors = require('cors');
require('dotenv').config();
const jwt = require('jsonwebtoken');
const port = process.env.PORT || 5000;
//middleware
app.use(cors());
app.use(express.json());
app.get('/', (req, res) => {
res.send('Hello From Node');
})
const uri = `mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASS}@cluster0.egkdk.mongodb.net/myFirstDatabase?retryWrites=true&w=majority`;
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true, serverApi: ServerApiVersion.v1 });
const run = async () => {
try{
await client.connect();
const InventoryCollection = client.db("carhouse").collection("cars");
app.get('/inventory', async(req, res) => {
const query = {};
const cursor = InventoryCollection.find(query);
const result = await cursor.toArray();
res.send(result);
})
app.get('/inventory/:id', async(req, res) => {
const id = req.params.id;
const query = { _id: ObjectId(id) };
const result = await InventoryCollection.findOne(query);
res.send(result);
})
//Update
app.put('/inventory/:id', async(req, res) => {
const id = req.params.id;
const updateCar = req.body;
const filter = { _id: ObjectId(id) };
const options = { upsert: true };
const updateDoc = {
$set: {
quantity: updateCar.quantity
},
};
const result = await InventoryCollection.updateOne(filter, updateDoc, options);
res.send(result);
})
//Delete
app.delete('/inventory/:id', async(req, res) =>{
const id = req.params.id;
const query = { _id: ObjectId(id) }
const result = await InventoryCollection.deleteOne(query)
res.send(result)
})
//Post
app.post('/addmycar', async(req, res) => {
const addCar = req.body;
const result = await InventoryCollection.insertOne(addCar);
res.send(result);
})
//Get - My Car
app.get('/addmycar', verifyJWT, async(req, res) => {
//const authHeader = req.headers.authorization; //1st checking
//console.log(authHeader);
const decodedEmail = req.decoded.email;
const email = req.query.email;
if(email == decodedEmail){
const query = { email: email };
const cursor = InventoryCollection.find(query);
const result = await cursor.toArray();
res.send(result);
}
else{
res.status(403).send({message: 'Forbidden access'})
}
})
//JWT
app.post('/login', async(req, res) => {
const user = req.body;
console.log(user);
const accessToken = jwt.sign(user, process.env.ACCESS_TOKEN_SECRET, {
expiresIn: '1d'
});
res.send({accessToken});
})
function verifyJWT(req, res, next){
const authHeader = req.headers.authorization;
if(!authHeader){
return res.status(401).send({message: 'UnAuth Access'})
}
const token = authHeader.split(' ')[1];
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, decoded) => {
if(err){
return res.status(403).send({message: "Forbiden Access"})
}
// console.log('decoded', decoded);
req.decoded = decoded;
})
console.log("Inside VJWT",authHeader);
next();
}
}
finally{
//await client.close(); or empty
}
}
run().catch(console.dir)
app.listen(port, () => {
console.log("Listening On: ", port);
})