· 5 years ago · Feb 12, 2020, 06:50 PM
1const express = require('express');
2const bodyParser = require('express');
3const mongoose = require('mongoose');
4const cors = require ('cors');
5const User = require ('./models/User');
6const jwt = require ('jsonwebtoken');
7
8
9
10//Connect DB
11mongoose.connect("mongodb+srv://johndoepotato:DpkjvwPwa6ASOD7R@cluster0-1o5j9.mongodb.net/test");
12
13const app = express();
14app.use(cors());
15app.use(bodyParser.json());
16app.use(bodyParser.urlencoded({ extended: false}));
17
18
19//routes
20app.post('/signup', (req, res, next) => {
21 // eslint-disable-next-line no-console
22 console.log(req.body.email)
23 const newUser = new User({
24 email: req.body.email,
25 name: req.body.name,
26 password: req.body.password,
27 })
28 newUser.save(err => {
29 if(err){
30 return res.status(400).json({
31 title: 'error',
32 error: 'email in use'
33 })
34 }
35 return res.status(200).json ({
36 title: 'signup success'
37 })
38 })
39})
40app.post('/login', (req,res,next) => {
41 User.findOne( {email: req.body.email }, (err, user) => {
42 if(err) return res.status(500).json({
43 title: 'server error',
44 error: err
45 })
46 if(!user){
47 return res.status(401).json({
48 title: 'user not found',
49 error: 'invalid credentials'
50 })
51 }
52 //incorrect password
53 if(req.body.password, user.password){
54 return res.status(401).json({
55 title: 'login failed',
56 error: 'invalid credentials'
57 })
58 }
59 //IF ALL IS GOOD create a token and send to front-end
60 let token = jwt.sign( { userId: user._id}, 'secretkey');
61 return res.status(200).json({
62 title: 'login success',
63 token: token
64 })
65 })
66})
67
68//grabbing user info
69app.get('/user', (req, res, next) => {
70 let token = req.headers.token; //token
71 jwt.verify(token, 'secretkey', (err, decoded) => {
72 if (err) return res.status(401).json({
73 title: 'unauthorized'
74 })
75 //token is valid
76 User.findOne({ _id: decoded.userId }, (err, user) => {
77 // eslint-disable-next-line no-console
78 if (err) return console.log(err)
79 return res.status(200).json({
80 title: 'user grabbed',
81 user: {
82 email: user.email,
83 name: user.name
84 }
85 })
86 })
87
88 })
89 })
90
91app.get('/', (req, res, next) => {
92 // eslint-disable-next-line no-console
93 res.send("hello");
94})
95
96
97
98const port = process.env.port || 5000
99
100app.listen(port, (err) => {
101 // eslint-disable-next-line no-console
102 if(err) return console.log(err);
103 // eslint-disable-next-line no-console
104 console.log('server running on port '+ port);
105})