thoughts/server.js
server.jsRaw
1var express = require("express"),
2 app = express(),
3 bodyParser = require("body-parser"),
4 methodOverride = require("method-override"),
5 mongoose = require('mongoose');
6
7
8var morgan = require('morgan');
9var jwt = require('jsonwebtoken'); // used to create, sign, and verify tokens
10var config = require('./config'); // get our config file
11
12
13// Connection to DB
14mongoose.connect(config.database, function(err, res) {
15 if(err) throw err;
16 console.log('Connected to Database');
17});
18app.set('superSecret', config.secret); // secret variable
19
20// Middlewares
21app.use(bodyParser.urlencoded({ extended: false }));
22app.use(bodyParser.json());
23app.use(methodOverride());
24
25// use morgan to log requests to the console
26app.use(morgan('dev'));
27
28// Import Models and controllers
29var userMdl = require('./models/userModel')(app, mongoose);
30var userCtrl = require('./controllers/userController');
31
32var thoughtMdl = require('./models/thoughtModel')(app, mongoose);
33var thoughtCtrl = require('./controllers/thoughtController');
34
35/*// Example Route
36var router = express.Router();
37router.get('/', function(req, res) {
38 res.send("Hello world!");
39});
40app.use(router);*/
41app.use(express.static(__dirname + '/web'));
42
43// API routes ------------------------------------------------------
44var apiRoutes = express.Router();
45
46apiRoutes.route('/users')
47 .get(userCtrl.findAllUsers)
48 .post(userCtrl.addUser);
49apiRoutes.route('/users/:id')
50 .get(userCtrl.findById);
51apiRoutes.route('/users/byusername/:username')
52 .get(userCtrl.findUserByUsername);
53apiRoutes.route('/thoughts/user/:userid')
54 .get(thoughtCtrl.findAllThoughtsFromUsername);
55
56apiRoutes.route('/auth')
57 .post(userCtrl.login);
58
59apiRoutes.route('/thoughts')
60 .get(thoughtCtrl.findAllThoughts);
61
62apiRoutes.route('/thoughts/:id')
63.get(thoughtCtrl.findById)
64
65// route middleware to verify a token
66apiRoutes.use(function(req, res, next) {
67
68 // check header or url parameters or post parameters for token
69 var token = req.body.token || req.query.token || req.headers['x-access-token'];
70
71 // decode token
72 if (token) {
73
74 // verifies secret and checks exp
75 jwt.verify(token, app.get('superSecret'), function(err, decoded) {
76 if (err) {
77 return res.json({ success: false, message: 'Failed to authenticate token.' });
78 } else {
79 // if everything is good, save to request for use in other routes
80 req.decoded = decoded;
81 next();
82 }
83 });
84
85 } else {
86
87 // if there is no token
88 // return an error
89 return res.status(403).send({
90 success: false,
91 message: 'No token provided.'
92 });
93
94 }
95});
96
97apiRoutes.route('/users/:id')
98 .put(userCtrl.updateActivity)
99 .delete(userCtrl.deleteActivity);
100
101apiRoutes.route('/thoughts')
102 .post(thoughtCtrl.addThought);
103
104apiRoutes.route('/thoughts/:id')
105 .put(thoughtCtrl.updateActivity)
106 .delete(thoughtCtrl.deleteActivity);
107
108app.use('/api', apiRoutes);
109// end of API routes -------------------------------------
110
111// Start server
112app.listen(3000, function() {
113 console.log("Node server running on http://localhost:3000");
114});