app.js
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 session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var multer = require('multer');
var routes = require('./routes/index');
var settings = require('./settings');
var flash = require('connect-flash');
var users = require('./routes/users');
var app = express();//生成一个express实例 app
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');
app.use(flash());
app.engine('.html', require('ejs').__express);
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
resave: false,
saveUninitialized: true,
secret: settings.cookieSecret,
key: settings.db,//cookie name
cookie: {maxAge: 100060602430},//30 days
store: new MongoStore({
url: 'mongodb://localhost/blog', db: settings.db, host: settings.host, port: settings.port
})
}));
app.use(multer({
dest: './public/images',
rename: function (fieldname, filename) {
return filename;
}
}));
app.use('/', routes);//加载路由
app.use('/users', users);
// 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: {}
});
});
module.exports = app;//导出app实例供其他模块调用
index.js
var crypto = require('crypto'),
User = require('../models/user.js'); Post = require('../models/post.js');
var express = require('express');
var router = express.Router();
/GET index page./
router.getAll('/', function (req, res) {
Post.get(null, function (err, posts) { if (err) { posts = []; } res.render('index', { title: '主页', user: req.session.user, posts: posts, success: req.flash('success').toString(), error: req.flash('error').toString() });
});
});
router.get('/reg', checkNotLogin);
router.get('/reg', function (req, res) {
res.render('reg', {
title: '注册', user: req.session.user, success: req.flash('success').toString(), error: req.flash('error').toString()
});
});
router.post('/reg', checkNotLogin);
router.post('/reg', function (req, res) {
var name = req.body.name, password = req.body.password, password_re = req.body['password-repeat']; if (password_re != password) { req.flash('error', '两次输入的密码不一致!'); return res.redirect('/reg'); } var md5 = crypto.createHash('md5'), password = md5.update(req.body.password).digest('hex'); var newUser = new User({ name: name, password: password, email: req.body.email }); User.get(newUser.name, function (err, user) { if (err) { req.flash('error', err); return res.redirect('/'); } if (user) { req.flash('error', '用户已存在!'); return res.redirect('/reg'); } newUser.save(function (err, user) { if (err) { req.flash('error', err); return res.redirect('/reg'); } req.session.user = user; req.flash('success', '注册成功!'); res.redirect('/'); }); }); });
router.get('/login', checkNotLogin);
router.get('/login', function (req, res) {
res.render('login', {
title: '登录', user: req.session.user, success: req.flash('success').toString(), error: req.flash('error').toString()});
});
router.post('/login', checkNotLogin);
router.post('/login', function (req, res) {
var md5 = crypto.createHash('md5'),
password = md5.update(req.body.password).digest('hex'); User.get(req.body.name, function (err, user) { if (!user) { req.flash('error', '用户不存在!'); return res.redirect('/login'); } if (user.password != password) { req.flash('error', '密码错误!'); return res.redirect('/login'); } req.session.user = user; req.flash('success', '登录成功!'); res.redirect('/') });
});
router.get('/post', checkLogin);
router.get('/post', function (req, res) {
res.render('post', {
title: '发表', user: req.session.user, success: req.flash('success').toString(), error: req.flash('error').toString() });
});
router.post('/post', checkLogin);
router.post('/post', function (req, res) {
var currentUser = req.session.user, post = new Post(currentUser.name, req.body.title, req.body.post); post.save(function (err) { if (err) { req.flash('error', err); return res.redirect('/'); } req.flash('success', '发布成功!'); res.redirect('/'); });
});
router.get('/logout', checkLogin);
router.get('/logout', function (req, res) {
req.session.user = null;
req.flash('success', '退出成功!');
res.redirect('/');
});
router.get('/upload', checkLogin);
router.get('/upload', function (req, res) {
res.render('upload', {
title: '文件上传', user: req.session.user, success: req.flash('success').toString(), error: req.flash('error').toString()
});
});
router.post('/upload', checkLogin);
router.post('/upload', function (req, res) {
req.flash('success', '文件上传成功!');
res.redirect('/upload');
})
router.get('/u/:name', function (req, res) {
User.get(req.params.name, function (err, user) {
if (!user) { req.flash('error', '用户不存在!'); return res.redirect('/'); } Post.getAll(user.name, function (err, posts) { if (err) { req.flash('error', err); return res.redirect('/'); } res.render('user', { title: user.name, posts: posts, user: req.session.user, success: req.flash('success').toString(), error: req.flash('error').toString() }); });
});
});
function checkLogin(req, res, next) {
if (!req.session.user) {
req.flash('error', '未登录!'); res.redirect('/login');
}
next();
}
function checkNotLogin(req, res, next) {
if (req.session.user) {
req.flash('error', '已登录!'); res.redirect('back');
}
next();
}
module.exports = router;
走同样的路,发现不同的人生