113 lines
3.5 KiB
JavaScript
113 lines
3.5 KiB
JavaScript
var appEnv = process.env.APP_ENV;
|
|
if (appEnv == undefined) {
|
|
appEnv = 'development';
|
|
}
|
|
require('dotenv').config({ path: `.env.${appEnv}` });
|
|
const { promisify } = require('util'),
|
|
chalk = require('chalk');
|
|
//bodyParser = require('body-parser')
|
|
var express = require('express'),
|
|
session = require('express-session'),
|
|
cors = require('cors'),
|
|
errorhandler = require('errorhandler'),
|
|
morgan = require('morgan');
|
|
|
|
const utils = require('./src/utils'),
|
|
exceptionHandler = require('./src/middlewares/exceptions.handler'),
|
|
connectDb = require('./src/database/connectDb'),
|
|
config = require('./src/config');
|
|
|
|
// Create global app object
|
|
var app = express();
|
|
app.use(cors());
|
|
|
|
// Morgan status code color config
|
|
morgan.token('statusColor', (req, res) => {
|
|
let status = (typeof res.headersSent !== 'boolean' ? Boolean(res.header) : res.headersSent)
|
|
? res.statusCode
|
|
: undefined
|
|
return status >= 500 ? chalk.red(status)
|
|
: status >= 429 ? chalk.magenta(status)
|
|
: status >= 400 ? chalk.yellow(status)
|
|
: status >= 300 ? chalk.cyan(status)
|
|
: status >= 200 ? chalk.green(status)
|
|
: chalk.underline(status);
|
|
});
|
|
// Morgan log line config
|
|
app.use(morgan('[:date[iso]] ":method :url HTTP/:http-version" :statusColor :res[content-length] ":referrer" ":user-agent" :remote-addr'));
|
|
|
|
//use express.json() to parse incoming requests with JSON payloads
|
|
app.use(express.json());
|
|
//parse incoming requests with urlencoded payloads
|
|
app.use(express.urlencoded({ extended: true }));
|
|
|
|
//app.use(bodyParser.urlencoded({ extended: false }));
|
|
//app.use(bodyParser.json());
|
|
|
|
app.use(require('method-override')());
|
|
app.use(express.static(__dirname + '/public'));
|
|
|
|
app.use(session({ secret: config.secret, cookie: { maxAge: config.session_lifetime }, resave: false, saveUninitialized: false }));
|
|
|
|
if (appEnv !== 'production') {
|
|
app.use(errorhandler());
|
|
}
|
|
|
|
require('./src/database/models/mongo');
|
|
config.initAuth();
|
|
//config.initApiKey();
|
|
connectDb.connectAllDb();
|
|
|
|
app.use(require('./src/routes'));
|
|
|
|
app.use(exceptionHandler.notFoundErrorHandler);
|
|
app.use(exceptionHandler.logErrorHandler);
|
|
app.use(exceptionHandler.clientErrorHandler);
|
|
app.use(exceptionHandler.fianlErrorHandler);
|
|
|
|
/*
|
|
var userid = new mongoose.Types.ObjectId();
|
|
console.log('userid: ', userid._id.toString());
|
|
*/
|
|
/*
|
|
// catch 404 and forward to error handler
|
|
app.use(function(req, res, next) {
|
|
let err = new Error('Not Found');
|
|
err.status = 404;
|
|
next(err);
|
|
});
|
|
|
|
// error handler
|
|
app.use(function(err, req, res, next) {
|
|
console.log(`${utils.getDateTimeISOString()}`, chalk.red(`error handler : ${err.message} ${err.err}`));
|
|
if (res.headersSent) {
|
|
return next(err)
|
|
}
|
|
res.status(err.status || 500);
|
|
if (!isProduction) {
|
|
// development error handler will print stacktrace
|
|
res.json({errors: {
|
|
message: err.message,
|
|
error: err.err,
|
|
stack: err.stack
|
|
}});
|
|
} else {
|
|
// production error handler no stacktraces leaked to user
|
|
res.json({errors: {
|
|
message: err.message,
|
|
error: {},
|
|
stack: {}
|
|
}});
|
|
}
|
|
});
|
|
*/
|
|
|
|
const startServer = async () => {
|
|
const port = process.env.SERVER_PORT || 3200;
|
|
await promisify(app.listen).bind(app)(port);
|
|
console.log(`${utils.getDateTimeISOString()}`, chalk.green(`${process.env.APP_ENV} API server listening on port ${port}`));
|
|
}
|
|
|
|
// finally, let's start our server...
|
|
startServer();
|