-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
60 lines (49 loc) · 1.62 KB
/
server.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
require('./init');
const ejs = require('ejs');
const fs = require('fs-extra');
const http = require('http');
const Koa = require('koa');
const bodyparser = require('koa-bodyparser');
const helmet = require('koa-helmet');
const logger = require('koa-logger');
const methodoverride = require('koa-methodoverride');
const session = require('koa-session');
const serve = require('koa-static');
const api = require('./api');
const controller = require('./controllers');
const handleerror = require('./error');
const app = new Koa();
const server = http.createServer(app.callback());
app.keys = [process.env.secret];
app.context.db = require('./models');
app.context.io = require('./socketio')(server);
app.context.render = async (path, data, options) => {
const filename = `${__dirname}/views/${path}.ejs`;
const template = await fs.readFile(filename, 'utf8');
return ejs.render(template, data, options);
}
// opaque redirect
app.context.divert = async function (path) {
this.status = 278;
this.body = { path };
}
app.use(async (ctx, next) => {
const objectId = ctx.db.mongoose.Types.ObjectId;
if (ctx.session.admin) {
ctx.user = await ctx.db.Admin.findById(objectId(ctx.session.id));
}
if (ctx.session.user) {
ctx.user = await ctx.db.User.findById(objectId(ctx.session.id));
}
await next();
});
app.use(helmet());
app.use(session(app));
app.use(methodoverride());
app.use(logger());
app.use(bodyparser());
app.use(handleerror());
app.use(serve('./public'));
app.use(controller());
app.use(api());
server.listen(process.env.port || 8080);