summer-mvc
Version:
Structured, Light, Spring-like Web Application Development Framework
200 lines (149 loc) • 5.39 kB
JavaScript
// http, https initializing
const http = require( "http" );
const https = require( "https" );
// express initializing
const express = require( "express" );
var app = express();
const setter = require( "./express_was_setter.js" );
// Setting Tools
var setterPromises = [];
setterPromises.push( setter.parseAnnotation() );
setterPromises.push( setter.setViewInfo( express, app ) );
setterPromises.push( setter.setBodyParser( app ) );
setterPromises.push( setter.setConnectionHandler( app ) );
setterPromises.push( setter.setFileHandler() );
setterPromises.push( setter.setMysqlHandler() );
setterPromises.push( setter.setMssqlHandler() );
setterPromises.push( setter.setExitHandler() );
Promise.all( setterPromises )
.then( function(){
var argv = arguments[0];
for( var i=0; i<argv.length; i++ ){
if( argv[i].message ){
logger.info( "Initializing : " + argv[i].message );
}
}
} )
.then( function(){
// Start WAS - http
var httpServer = http.createServer(app);
app.set('port', (process.env.PORT || __defaultPort)); // 3000 was my original port
httpServer.listen( app.get('port'), () => {
logger.info( "Listen Port for HTTP : " + app.get('port') );
} );
// app.listen( app.get('port'), () => {
// logger.info( "Listen Port : " + app.get('port') );
// } );
// Start WAS - https
var httpsServer = null;
var httpsInitializer = require( __httpsInitializer );
var credentials = httpsInitializer.getHttpsCertifications();
if( __httpsUsage && !credentials.status && credentials.status != "error" ){
httpsServer = https.createServer( httpsInitializer.getHttpsCertifications(), app );
httpsServer.listen( __defaultHttpsPort, () => {
logger.info( "Listen Port For HTTPS : " + __defaultHttpsPort );
} );
}
// set context Dispatcher
const contextDispatcher = require( __contextDispatcher );
// method = get
let dispatchingInfo = __inlineContextDispatchingInfo != null ? __inlineContextDispatchingInfo : require( __contextDispatchingInfo );
let getSpecifications = dispatchingInfo[ "GET" ];
for( let i=0; i<getSpecifications.length; i++ ){
app.get( (getSpecifications[i]).path, (req,res,next) => {
req._parsedUrl.pathname = (getSpecifications[i]).path;
logger.info( "ACCEPTED-LANGUAGE :", req.headers["accept-language"] );
logger.info( "REQUEST PATH :", req.path );
// 2. Dispatcher
contextDispatcher.dispatching( req, res, getSpecifications[i] )
.then( function( mav ){
try{
// 2-1. Ajax
if( req.xhr || (req.headers["accept"] && req.headers.accept.indexOf("json") > -1) ){
res.status(200);
res.send( mav.model );
}
// 2-2. With View
else{
let contentDisposition = res._headers[ "content-disposition" ];
// 2-2-1. Render View
if( !contentDisposition ){
res.status(200);
// path.join returns "." when parameters are empty string
if( mav.view != "." ){
res.render( mav.view, mav.model );
} else{
res.send( mav.model );
}
}
// 2-2-2. File Download
else{
res.status(200);
// res.download( require("path").join(mav.model.savedPath, mav.model.savedFileName), mav.model.originalFileName );
}
}
} catch( err ){
res.status(404);
next( err );
}
} )
.catch( function(err){
res.status(500);
next( err );
} );
} );
}
// method = post
let postSpecifications = dispatchingInfo[ "POST" ];
for( let i=0; i<postSpecifications.length; i++ ){
app.post( (postSpecifications[i]).path, (req, res, next)=>{
req._parsedUrl.pathname = (postSpecifications[i]).path;
logger.info( "ACCEPTED-LANGUAGE :", req.headers["accept-language"] );
logger.info( "REQUEST PATH :", req.path );
// 2. Dispatcher
contextDispatcher.dispatching( req, res, postSpecifications[i] )
.then( function( mav ){
// 2-1. Ajax
try{
if( req.xhr || req.headers.accept.indexOf("json") > -1 ){
res.status(200);
res.send( mav.model );
}
// 2-2. With View
else{
let contentDisposition = res._headers[ "content-disposition" ];
// 2-2-1. Render View
if( !contentDisposition ){
// path.join returns "." when parameters are empty string
if( mav.view != "." ){
res.render( mav.view, mav.model );
} else{
res.send( mav.model );
}
}
// 2-2-2. File Download
else{
res.status(200);
res.download( require("path").join(mav.model.savedPath, mav.model.savedFileName), mav.model.originalFileName );
}
}
} catch( err ){
console.log( "Error occured while res rendering : app.post" );
res.status(404);
next( err );
}
} )
.catch( function(err){
console.log( "Error catched in app.post method..." );
res.status(500);
next( err );
} );
} );
}
// set error handler
setter.setErrorHandler( app );
} )
.catch( function(err){
logger.error( err );
process.exit();
} );