-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
122 lines (108 loc) · 3.8 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
117
118
119
120
121
122
const express = require('express');
const fs = require('fs')
const bodyParser = require('body-parser');
const TypeORM = require('typeorm');
const Session = require('express-session');
require('reflect-metadata')
global.maze = {
models: [],
modules: [],
judgequeue: [],
model(name) {
return require(`./models-built/${name}`).default;
},
async run() {
global.app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(require('cookie-parser')());
app.use((req, res, next) => {
res.locals.active = req.path.split('/')[1];
res.locals.req = req;
res.locals.res = res;
next();
});
app.use(Session({
secret: 'GirlsBandCry',
cookie: { httpOnly: false },
rolling: true,
saveUninitialized: true,
resave: true
}));
app.use((req, res, next) => {
let User = maze.model('user');
if (req.session.user_id) {
User.findById(req.session.user_id).then((user) => {
res.locals.user = user;
next();
}).catch((err) => {
console.log(err);
res.locals.user = null;
req.session.user_id = null;
next();
});
} else {
if (req.cookies.login) {
try {
let obj = JSON.parse(req.cookies.login);
User.findOne({
where: {
username: String(obj[0]),
password: String(obj[1])
}
}).then(user => {
if (!user) throw "查询用户时发生错误。";
res.locals.user = user;
req.session.user_id = user.id;
next();
}).catch(err => {
console.log(err);
res.locals.user = null;
req.session.user_id = null;
next();
});
} catch (e) {
res.locals.user = null;
req.session.user_id = null;
next();
}
} else {
res.locals.user = null;
req.session.user_id = null;
next();
}
}
});
fs.readdir('./modules/', (err, files) => {
if (err) {
console.log(err);
return;
}
files.filter((file) => file.endsWith('.js'))
.forEach((file) => this.modules.push(require(`./modules/${file}`)));
});
await this.connect();
var server = app.listen(8081, () => {
console.log('Server is listening on port 8081.');
});
},
async connect() {
global.TypeORM = TypeORM;
const models = fs.readdirSync('./models/')
.filter(filename => filename.endsWith('.ts') && filename !== 'common.ts')
.map(filename => require('./models-built/' + filename.replace('.ts', '.js')).default);
await TypeORM.createConnection({
type: 'mariadb',
host: '127.0.0.1',
port: 3306,
username: 'aestas16',
password: '',
database: 'maze',
entities: models,
synchronize: true,
extra: { connectionLimit: 50 }
});
}
};
maze.run();