1
0
mirror of https://github.com/chowa/ejyy.git synced 2026-01-21 05:07:48 +08:00
Files
ejyy/api-server/src/app.ts
2022-07-31 12:40:07 +08:00

101 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* +----------------------------------------------------------------------
* | 「e家宜业」 —— 助力物业服务升级,用心服务万千业主
* +----------------------------------------------------------------------
* | Copyright (c) 2020-2022 https://www.chowa.cn All rights reserved.
* +----------------------------------------------------------------------
* | Licensed 未经许可不能去掉「e家宜业」和「卓瓦科技」相关版权
* +----------------------------------------------------------------------
* | Author: contact@chowa.cn
* +----------------------------------------------------------------------
*/
import 'module-alias/register';
import cluster from 'cluster';
import os from 'os';
import Koa from 'koa';
import KoaRouter from 'koa-router';
import KoaBodyMiddleware from 'koa-body';
import KoaSessionMilddleware from 'koa-session';
import KoaLogMiddleware from 'koa-logger';
import MysqlSessionStore from '~/store/mysql-session';
import http from 'http';
import cwlog from 'chowa-log';
import config from '~/config';
import * as ScheduleJob from '~/schedule';
import MpModule from '~/module/mp';
import PcModule from '~/module/pc';
import NotifyModule from '~/module/notify';
import OaModule from '~/module/oa';
import wss from '~/wss';
import * as redisService from '~/service/redis';
import ModelMiddleware from '~/middleware/model';
import IpMiddleware from '~/middleware/ip';
import HeaderMiddleware from '~/middleware/header';
import WatcherMiddleware from '~/middleware/watcher';
import InitMiddleware from '~/middleware/init';
import * as iot from '~/iot';
if (cluster.isMaster) {
cwlog.success(`main process ${process.pid}`);
for (let i = 0; i < (process.env.NODE_ENV === 'production' ? os.cpus().length : 1); i++) {
cluster.fork({ port: config.server.port + i });
}
} else {
const app = new Koa();
const router = new KoaRouter();
const server = http.createServer(app.callback());
cwlog.setProject(`${config.name}-${process.pid}`);
cwlog.displayDate();
// schedule
ScheduleJob.run();
// modules
MpModule(router);
PcModule(router);
NotifyModule(router);
OaModule(router);
// WebSocket
wss.init(server);
// for socket
redisService.subscribe();
// 物联网
iot.init(router);
app.use(KoaBodyMiddleware({ multipart: true }))
.use(
KoaLogMiddleware({
transporter: str => {
cwlog.log(`${str}`);
}
})
)
.use(
KoaSessionMilddleware(
{
store: new MysqlSessionStore(),
...config.session
},
app
)
)
.use(ModelMiddleware())
.use(IpMiddleware())
.use(HeaderMiddleware())
.use(InitMiddleware())
.use(router.routes())
.use(WatcherMiddleware());
const port = process.env.port ? parseInt(process.env.port, 10) : config.server.port;
server.listen(port, '0.0.0.0', () => {
cwlog.success(`${config.name} server running on port ${port}work process ${process.pid}`);
});
}