Bootstrapping

Setting up the web server

Bootstrapping

Overview

To bootstrap your server use the init method:

init(boostrapModule: any, rootPath?: string, authProvider?: AuthProvider,httpsConfiguration:any)

bootstrapModule - the init module which use as entry point, contains references to other modules if needed.

rootPath - Server uri prefix

authProvider - the authorization services, more on that on Authorization section

httpsConfiguration - configuration for setting the connection as https (mostly use for - {cert:certificatePath,key:keyPath})

Simple usage

import {HttpServer} from "@sugoi/server";

const server:HttpServer = HttpServer.init(BootstrapModule,"/api")
                                    .build()
                                    .listen(3000);

Setting middlewares and Error handlers

For setting static file serving use:

setStatic(pathToStatic:string,route?:string)

For setting middlewares use:

setMiddlewares(...(app)=>void)

For setting error handlers use:

setErrorHandlers((app) => void)

Predefined error handler

SugoiJS provides a predefined error handler named (defaultErrorHandler) which provides loggin the error and returning an error to the customer.

Example:

app.use(defaultErrorHandler(<boolean>isDev))

Full example:

(<HttpServer>server)
    .setStatic("assets/admin","/admin")
    .setStatic("assets/main")
    .setMiddlewares((app) => {
        app.use(bodyParser.json());
        app.use(compression());
        if (DEVELOPMENT) {
            app.set('json spaces', 2);
            app.use(cors());
            app.use(require('morgan')('dev'));
        }
        app.use(express.static(paths.static));
    })
    .setErrorHandlers((app) => {
        app.use(function (req, res, next) {
            return res.sendFile(path.resolve(paths.index))
        });
        app.use(defaultErrorHandler(isDev));
    });

Build & listen

After setting the middlewares and error handlers, build and listen to requests by:

server.build()
    .listen(PORT, (error: Error) => {
        if (error) {
            logger.error(error.message);
            throw error;
        }
        logger.debug(`Server running @ ${HOST}:${PORT}`);
    });

This call will return http.Server instance which can be use for setting app variables, socket server and more.

Full example

server.setStatic("assets")
    .setMiddlewares((app) => {
        app.use(bodyParser.json());
        app.use(compression());
    })
    .setErrorHandlers((app) => {
        app.use(function (req, res, next) {
            return res.sendFile(path.resolve(paths.index))
        });
        app.use((req,res,next)=>{
            return function(err){
                if(err instanceof SugoiServerError){
                    console.log.error(err.stack);
                    console.log.error(`${err.message} ${JSON.stringify(err.data)});
                    res.status(500).send("Internal error");
                }
            }
        });
    });

Retrieving the server app

For retrieving the server application use the HttpServer instance method getServer() , this method will return the common server application which will allow you to use .get,.put,.use etc..

Example

const httpServer = server.build();
const app = httpServer.getServer();
app.get("/",(req,res,next)=>{
    res.json({success:true,data:{}});
})

httpServer.listen(3000)

SugoiJS support migrate existing project by providing hybrid mode.

For achieving this approach use the initializeFrom method

HttpServer.initializeFrom(sourceApp: TServer, bootstrapModule: any, authProvider?: TNewable<AuthProvider>)

TServer - http.Server | https.Server | { listen: (...args) => any }

Example

import {HttpServer} from "@sugoi/server";

const server:HttpServer = HttpServer.initializeFrom(myExpressApp,ServerModule);

Last updated