-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
65 lines (55 loc) · 1.68 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
/**
* Created by faerulsalamun on 07/29/17.
*/
'use strict';
const Koa = require(`koa`);
const app = new Koa();
const config = require(`config`);
const session = require(`koa-generic-session`);
const redisStore = require(`koa-redis`);
const convert = require(`koa-convert`);
const passport = require(`koa-passport`);
const debug = require(`debug`)(`app`);
const bodyParser = require(`koa-bodyparser`);
const bouncer = require(`koa-bouncer`);
const mw = require(`./app/middlewares/validation`);
const cors = require(`kcors`);
const responseHandler = require(`./app/middlewares/response`);
const winston = require(`winston`);
const locale = require(`koa-locale`); // detect the locale
const i18n = require(`koa-i18n`);
// Database
require(`./app/helpers/database`);
// Passport
require(`./app/middlewares/passport`);
// Locale
locale(app);
app.use(i18n(app, {
directory: `./config/locales`,
locales: [`en`], // `zh-CN` defualtLocale, must match the locales to the filenames
}));
// Setup KOA
app.use(passport.initialize());
app.use(passport.session());
app.use(bodyParser());
app.use(cors());
app.keys = [`your-session-secret`];
app.use(convert(session({
store: redisStore(),
})));
// Middleware
app.use(bouncer.middleware());
app.use(mw.handleBouncerValidationError());
app.use(responseHandler({ contentType: `application/json` }));
// Logger
app.use(async (ctx, next) => {
const start = new Date();
await next();
const ms = new Date() - start;
debug(`${ctx.method} ${ctx.url} - ${ms}`);
});
// routes
require(`./app/routes/api`)(app);
app.listen(config.server.port, () => {
winston.info(`NodeJS Koa MongoDB Boilerplate API run on ${config.server.host} port ${config.server.port}`);
});