arnaucube
arnaucube/MEANseedPublic Self-hosted repository
MEANseed/server/server.js
server/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
 12mongoose.Promise = global.Promise;
 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
 21/*app.use(bodyParser.urlencoded({
 22    extended: false
 23}));
 24app.use(bodyParser.json());*/
 25
 26app.use(bodyParser.json({limit: '50mb'}));
 27app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
 28app.use(methodOverride());
 29
 30// use morgan to log requests to the console
 31app.use(morgan('dev'));
 32
 33// Import Models and controllers
 34var userMdl = require('./models/userModel')(app, mongoose);
 35var userCtrl = require('./controllers/userController');
 36
 37app.use(express.static(__dirname + '/../webapp'));
 38
 39
 40//CORS
 41app.use(function(req, res, next) {
 42    res.header("Access-Control-Allow-Origin", "*");
 43    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
 44    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Access-Token");
 45    next();
 46});
 47
 48// API routes ------------------------------------------------------
 49var apiRoutes = express.Router();
 50
 51apiRoutes.route('/login')
 52    .post(userCtrl.login);
 53apiRoutes.route('/signup')
 54    .post(userCtrl.signup);
 55apiRoutes.route('/users')
 56    .get(userCtrl.getAllUsers);
 57apiRoutes.route('/users/id/:userid')
 58    .get(userCtrl.getUserById);
 59
 60// OJU AQUÏ TREC la verificació de token temporalment, per fer les proves des de l'app
 61// route middleware to verify a token
 62apiRoutes.use(function(req, res, next) {
 63
 64    // check header or url parameters or post parameters for token
 65    var token = req.body.token || req.query.token || req.headers['x-access-token'];
 66
 67    // decode token
 68    if (token) {
 69        // verifies secret and checks exp
 70        jwt.verify(token, app.get('superSecret'), function(err, decoded) {
 71            if (err) {
 72                return res.send(204,
 73                {
 74                    success: false,
 75                    message: 'Failed to authenticate token.'
 76                });
 77            } else {
 78                // if everything is good, save to request for use in other routes
 79                req.decoded = decoded;
 80                //console.log("decoded " + decoded);
 81                next();
 82            }
 83        });
 84
 85    } else {
 86
 87        // if there is no token
 88        // return an error
 89        return res.status(204).send({
 90            success: false,
 91            message: 'No token provided.'
 92        });
 93
 94    }
 95}); //fi verificació de token
 96
 97apiRoutes.route('/users/token')
 98    .get(userCtrl.getUserByToken);
 99apiRoutes.route('/users')//agafa l'user a partir del token
100    .put(userCtrl.updateUser)//no comprovat
101    .delete(userCtrl.deleteUser);
102
103
104app.use('/api', apiRoutes);
105// end of API routes -------------------------------------
106
107// Start server
108app.listen(config.port, function() {
109    console.log("Node server running on port" + config.port);
110});