123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /**
- * 应用程序入口。
- */
- "use strict";
- let express = require('express');
- let path = require('path');
- let favicon = require('serve-favicon');
- let logger = require('morgan');
- let cookieParser = require('cookie-parser');
- let bodyParser = require('body-parser');
- let log = require('./util/log');
- let redis = require('redis');
- let methodOverride = require('method-override');
- // server configurations
- let configFile = require('./include/commons').CONFIG_FILE;
- let config = require('./resources/config/' + configFile);
- // handlers
- let SocketHandler = require('./handlers/socket.handler');
- let UrlInitializer = require('./endpoints/url.initializer');
- let JobInitializer = require('./models/schedule/job.initializer');
- //消息订阅
- let pubSub = require('./models/redis/pubSub.js');
- // initialize express application
- let app = express();
- app.set('port', config.serverPort);
- // view engine
- app.set('views', path.join(__dirname, 'views'));
- app.set('view engine', 'jade');
- // logger, body parser, cookie parser and view path
- app.use(favicon(__dirname + '/public/favicon.ico', null));
- app.use(logger('dev'));
- app.use(bodyParser.json({limit:'50mb'}));
- app.use(bodyParser.urlencoded({limit:'50mb',extended: true}));
- app.use(cookieParser());
- app.use(express.static(path.join(__dirname, 'public')));
- app.use(methodOverride(null, {methods: ['GET', 'POST', 'PUT', 'DELETE']}));
- //禁止options请求
- app.options('*', (req, res) => {
- res.status(406)
- .send({message: "禁止options"});
- });
- // web pages and endpoint
- UrlInitializer.initWebPages(app);
- UrlInitializer.initRestApi(app);
- // error handler, only handle the sync call exception
- app.use(function (err, req, res, next) {
- if (err) {
- res.status(err.httpStatus || 500)
- .send({message: err.message});
- }
- next(err);
- });
- // In development mode, error handler will print stacktrace, only handle the sync call exception
- if (app.get('env') === 'development') {
- app.use(function (err, req, res, next) {
- log.error(err);
- next(err);
- });
- }
- // only handle the sync call exception
- process.on('uncaughtException', function (err) {
- console.error(err);
- });
- // now enable http server and socket.io
- let server;
- // https
- if(config.httpsOpen){
- let fs = require("fs");
- // Configuare https
- let httpsOption = {
- key : fs.readFileSync(config.httpsConfig.key),
- cert: fs.readFileSync(config.httpsConfig.pem)
- }
- server = require('https').createServer(app);
- }else{
- server = require('http').createServer(app);
- }
- let io = require('socket.io').listen(server);
- // let io = require('socket.io').listen(server,{path:"/mlw/im"}); //im子目录 nginx也需要修改
- server.listen(config.serverPort);
- // event listener for HTTP server "error" event
- server.on('error', function (error) {
- if (error.syscall !== 'listen') throw error;
- let bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
- // handle specific listen errors with friendly messages
- switch (error.code) {
- case 'EACCES':
- console.error(bind + ' requires elevated privileges');
- process.exit(1);
- break;
- case 'EADDRINUSE':
- console.error(bind + ' is already in use');
- process.exit(1);
- break;
- default:
- throw error;
- }
- });
- // event listener for HTTP server "listening" event
- server.on('listening', function onListening() {
- let addr = server.address();
- let bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
- log.info('bind'+bind);
- });
- let socketHandler = new SocketHandler(io);
- socketHandler.start();
- if(!server.address()){
- log.error('Starting IM server failed, port is already in used.');
- process.exit(1);
- } else {
- log.info('Starting IM server, version ' + config.version + ', running on port ' + server.address().port + ', ' + new Date().toLocaleString());
- log.info('Configuration profile: ' + configFile.split('.')[1]);
- }
- // JobInitializer.init();
- pubSub.registerHandlers(config.subChannel,msg=> console.log(msg));
- pubSub.subscribe(config.subChannel);
|