arnaucube
arnaucube/thoughtsPublic Self-hosted repository
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});