You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
2.8 KiB

var express = require('express'),
passport = require('passport'),
router = express.Router();
var User = require('../models/users'),
Location = require('../models/locations');
// user index
router.get('/', function(req, res) {
res.locals.login = req.isAuthenticated();
User.find(function(err, users) {
res.render('users/index.ejs', { users: users });
});
});
// json for all users (for testing)
router.get('/json', function(req, res) {
User.find(function(err, users) {
res.send(users);
});
});
// json for specific user, fetched by ajax to display markers on map
router.get('/:id/json', function(req, res) {
User.findById(req.params.id, function(err, user) {
res.send(user);
});
});
// logout of session
router.get('/logout', function(req, res) {
req.logout();
res.redirect('/users');
});
// show page -- can only be viewed if logged in
router.get('/:id', isLoggedIn, function(req, res) {
// for user control flow within template (enables editing only on the user's own page)
req.params.id == req.user.id ? res.locals.usertrue = true : res.locals.usertrue = false;
User.findById(req.params.id, function(err, user) {
res.render('users/show.ejs', { user: user });
});
});
// saves a new location to the Location model and the User's locations list
router.post('/:id/newlocation', function(req, res) {
User.findById(req.params.id, function(err, user) {
var location = new Location(req.body);
location.save(function(err, location) {
user.locations.push(location);
user.save(function(err, user) {
res.redirect('/users/' + req.params.id);
});
});
});
});
// user create -- signup
router.post('/', passport.authenticate('local-signup', {
failureRedirect: '/users' }), function(req, res) {
//success redirect goes to show page
res.redirect('/users/' + req.user.id);
});
// login
router.post('/login', passport.authenticate('local-login', {
failureRedirect: '/users' }), function(req, res) {
// success redirect goes to show page
res.redirect('/users/' + req.user.id);
});
// delete
router.delete('/:id', function(req, res) {
console.log('DELETE ROUTE ACCESSED');
User.findById(req.params.id, function(err, user) {
if (user.locations.length == 0) {
user.remove(function(err) {
res.redirect('/users');
});
} else {
user.locations.forEach(function(location) {
Location.findOneAndRemove({ _id: location.id }, function(err) {
if (err) console.log(err);
});
});
user.remove(function(err) {
res.redirect('/users');
});
} // end if
}); // end User find
});
// middleware to check login status
// used in show route
function isLoggedIn(req, res, next) {
console.log('isLoggedIn middleware');
if (req.isAuthenticated()) {
return next();
} else {
res.redirect('/users');
}
}
module.exports = router;