Skip to content

Instantly share code, notes, and snippets.

@cacheflow
Created March 5, 2016 02:02
Show Gist options
  • Save cacheflow/84f738192066ca5e63f4 to your computer and use it in GitHub Desktop.
Save cacheflow/84f738192066ca5e63f4 to your computer and use it in GitHub Desktop.
var express = require('express');
var passport = require('passport');
var router = express.Router();
var multer = require('multer');
var upload = multer({dest: './images/'})
// required models
var User = require('../models/User');
var Photo = require('../models/Photo');
var db = require('../models/db');
// required controllers
var SessionsController = require('../controllers/Sessions');
var UsersController = require('../controllers/Users');
var PhotosController = require('../controllers/Photos');
// adding a root route
router.get('/', function (req, res) {
res.render('index', {user: req.user});
});
// middleware to make sure a user is logged in
var isLoggedIn = function (req, res, next) {
// if user is authenticated in the session, carry on
if (req.isAuthenticated()) {
return next();
// if they aren't redirect them to the login page
}
res.redirect('/login');
};
// renders sessions controller
router.get('/login', SessionsController.sessionsNew);
router.post('/login', passport.authenticate(
'local',
{
failureRedirect: '/login'
}), SessionsController.sessionsCreate);
router.get('/logout', SessionsController.sessionsDelete);
// render photos controller
router.get('/photos', isLoggedIn, PhotosController.renderPhotosIndex);
router.get('/photos/new', isLoggedIn, PhotosController.renderPhotosNew);
router.post('/photos', isLoggedIn, PhotosController.renderPhotosCreate);
router.post('/photos/upload', isLoggedIn, PhotosController.callMe);
router.get('/photos/:id/edit', isLoggedIn, PhotosController.renderPhotosEdit);
router.put('/photos/:id', isLoggedIn, PhotosController.renderPhotosUpdate);
router.get('/photos/:id', isLoggedIn, PhotosController.renderPhotosShow);
router.delete('/photos/:id', isLoggedIn, PhotosController.deletePhoto);
// render users controller
router.get('/auth/register', UsersController.usersNew);
router.post('/auth/register', UsersController.usersCreate);
router.get('/users', isLoggedIn, UsersController.usersIndex);
router.get('/users/:id', isLoggedIn, UsersController.userShow);
router.get('/users/:id/edit', isLoggedIn, UsersController.userEdit);
router.put('/users/:id', isLoggedIn, UsersController.userUpdate);
router.delete('/users/:id', isLoggedIn, UsersController.userDelete);
module.exports = router;
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var methodOverride = require('method-override');
var flash = require('connect-flash');
var multer = require('multer');
var multerStorageSettings = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, './images/');
},
filename: function(req, file, cb) {
console.log("changing file name");
cb(null, file.originalname + '-' + Date.now());
}
});
var upload = multer({storage: multerStorageSettings});
// Require modules for mongoose and passport
var mongoose = require('mongoose');
var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy;
var routes = require('./routes/index');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.listen(process.env.PORT || 3000);
app.use(logger('dev'));
app.use(express.static('public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(methodOverride('_method'));
app.use(cookieParser());
app.use(methodOverride('_method'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(flash());
// auth middleware
app.use(require('express-session')({
secret: 'Keyboard cat',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
app.locals.title = 'FitBuds';
app.use('/', routes);
// passport configurations
var User = require('./models/User');
passport.use(new LocalStrategy(User.authenticate()));
// serialize User
passport.serializeUser(function(user, done) {
done(null, user.id);
});
// deserialize User
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
// create mongoURI
var mongoURI = 'mongodb://localhost/fitbuds';
if (process.env.NODE_ENV === 'production') {
mongoURI = process.env.MONGOLAB_URI
};
// connect to MongoDB
mongoose.connect('mongodb://localhost:27017/fitbuds');
app.post('/api/photos', upload.single('avatar'), function(req, res, next) {
console.log("this is in request", req.file, "this is the file", req.body);
});
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
// start the server
app.listen();
console.log('3000 is the the magic port');
module.exports = app;
<form id= "uploadForm"
enctype = "multipart/form-data"
action = "/api/photos"
method = "post"
>
<input type="file" name="avatar" />
<input type="submit" value="Upload Image" name="submit">
</form>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment