1 | import Router from './Router';
|
2 | import Response from './Response';
|
3 | import Controller from './Controller';
|
4 |
|
5 | import http from 'http';
|
6 | import logger from './logger';
|
7 |
|
8 | export {
|
9 | Router,
|
10 | Response,
|
11 | Controller as BaseController,
|
12 | };
|
13 |
|
14 | class App {
|
15 |
|
16 | config;
|
17 | port = 6060;
|
18 | prefix = '';
|
19 | base;
|
20 | portMessage = true;
|
21 | guardian;
|
22 |
|
23 | run() {
|
24 | let controllers;
|
25 | let base = this.base = `${process.cwd()}/${this.prefix}`;
|
26 |
|
27 | controllers = `${base}/controllers`;
|
28 |
|
29 | try {
|
30 | require(`${base}/routes/index.js`);
|
31 | } catch(e) {
|
32 | throw new Error(`cannot find ${base}/routes, or routes contains fatal error`);
|
33 | }
|
34 |
|
35 | try {
|
36 | this.config = require(`${base}/config`);
|
37 | if (this.config) this.port = this.config.port;
|
38 | } catch(e) {
|
39 | console.warn('Config file not found. If you want to use light-ning preferences, create config beside file where are you use "app.run()".')
|
40 | }
|
41 |
|
42 | Router.setControllersPath(controllers);
|
43 | Router.setGuardian(this.guardian);
|
44 |
|
45 | if (this.portMessage) {
|
46 | this.portMessage = false;
|
47 | console.info(``);
|
48 | console.info(`PORT: ${this.port}`);
|
49 | console.info(``);
|
50 | }
|
51 |
|
52 | return http.createServer((req, res) => {
|
53 | logger(req, res);
|
54 |
|
55 | Router.route(req, res);
|
56 | }).listen(this.port);
|
57 | }
|
58 |
|
59 | set(key, val) {
|
60 | this[key] = val;
|
61 | }
|
62 |
|
63 | get(key) {
|
64 | if (this[key]) return this[key];
|
65 | else return undefined;
|
66 | }
|
67 |
|
68 | }
|
69 |
|
70 | export default new App();
|