-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.js
116 lines (101 loc) · 2.89 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import express from 'express';
import exphbs from 'express-handlebars';
import path from 'path';
import favicon from 'serve-favicon';
import log4js from 'log4js';
import bodyParser from 'body-parser';
import cookieParser from 'cookie-parser';
import session from 'express-session';
import cors from 'cors';
import connect from 'connect';
import jwt from 'express-jwt';
import sessionMongoose from 'session-mongoose';
import config from './src/config';
import mongo from './src/db/mongo';
import mkdirs from './src/common/mkdirs';
import logger from './src/common/logger';
import tools from './src/middlewares/tools';
import jwtauth from './src/middlewares/jwtauth';
import routes from './src/routes';
const app = express();
const mkdirsSync = mkdirs.mkdirsSync;
const SessionStore = sessionMongoose(connect);
const mongodb = new mongo(app, config);
const store = new SessionStore({url: mongodb.dblink});
const auth = new jwtauth();
const __dirname = path.resolve();
// 判断文件夹是否存在, 若不存在则创建之
mkdirsSync(config.upload.tmp);
mkdirsSync(config.upload.path);
// view engine setup
app.set('views', path.join(__dirname, 'src/views'));
app.set('view engine', 'hbs');
app.engine('hbs', exphbs({
layoutsDir: path.join(__dirname, 'src/views/layouts/'),
defaultLayout: 'main',
extname: '.hbs',
helpers: {
time: Date.now
}
}));
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(log4js.connectLogger(logger('normal'), {level: 'auto', format: ':method :url :status'}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(path.join(__dirname, '/public')));
app.use(cookieParser(config.secret));
// set session.
app.use(session({
store: store,
cookie: {
maxAge: 60000,
},
resave: false,
saveUninitialized: true,
secret: config.secret
}));
app.use(cors());
app.use((req, res, next) => {
if (req.path.indexOf('/api') === -1) {
return res.render('index');
}
return next();
});
// custom middleware
app.use(/\/api/, tools);
app.use(/^((?!sign\/up|sign\/in|captcha).)+$/, [
jwt({secret: config.secret}),
auth.verifyToken.bind(auth)
]);
// 加载路由
routes(app);
// catch 404 and forward to error handler
app.use((req, res, next) => {
const err = new Error('Not Found');
err.status = 404;
// res.status(404)
// res.send('Not Found')
next(err);
});
// error handlers
// development error handler
if (app.get('env') === 'development') {
app.use((err, req, res) => {
res.status(err.status || 500);
res.render('error', {
layout: false,
message: err.message,
error: err
});
});
}
// production error handler
app.use((err, req, res) => {
res.status(err.status || 500);
res.render('error', {
layout: false,
message: err.message,
error: err
});
});
export default app;