node package manager
Love JavaScript? Your insights can make it even better. Take the 2017 JavaScript Ecosystem Survey »

engined-http

engined-http

HTTP agent service for engined, which is based on koa 2.

NPM

Installation

Install via NPM:

npm install engined-http

Usage

Start HTTP agent service in engined, see example below:

const { Manager } = require('engined');
const HTTPService = require('engined-http');
 
const MyHTTPService = HTTPService({
    port: 8080, // optional: default to 3001 if not set
    agentName: 'MyHTTP' // optional: default to 'default' if not set
});
 
const main = async () => {
 
    // Create manager
    let serviceManager = new Manager({ verbose: true });
 
    // Adding agent to manager
    serviceManager.add('MyHTTPService', MyHTTPService);
 
    // Start all services
    await serviceManager.startAll();
};
 
main();

Setup Router

For HTTP routing, there is a way to inherit RouterService class to create a router service to manage routes by using koa-router.

const Router = require('koa-router');
const { RouterService } = require('engined-http');
 
// Create service prototype and specify agent
const Service = RouterService({
    agentName: 'MyHTTP' // optional: default to 'default' if not set
});
 
class MyRouterService extends Service {
 
    async setupRoutes() {
        let router = Router();
 
        router.get('/', async (ctx) => {
            ctx.body = 'Hello!';
        });
 
        return router;
    }
}

Note: remember to add this service to engined service manager and start it.

Setup Middlewares

By default, HTTP service will apply koa-logger, koa2-cors and koa-bodyparser middlewares. If you would like to apply any perfered middlewares, just override setupMiddleware method of service.

class MyHTTPService extends HTTPService{{ port: 8080 }} {
 
    async setupMiddleware() {
        // Apply original `koa-logger`, `koa2-cors` and `koa-bodyparser` if you still need it
        await this._setupMiddleware();
 
        // Add your middleware
        this.agent.use(async (ctx) => {
            // Do something
        });
    }
}

Setup CORS (Cross-Origin Resource Sharing)

By override setupCORS method of service, to make settings as parameter for koa2-cors to support CORS.

class MyHTTPService extends HTTPService{{ port: 8080 }} {
 
    async setupCORS() {
        return { origin: '*' };
    }
}

Setup Body Parser

The body parser is common middleware to parse HTTP body, we can have settings supported by koa-bodyparser.

class MyHTTPService extends HTTPService{{ port: 8080 }} {
 
    async setupBodyParser() {
        return {
            jsonLimit: '50mb',
            textLimit: '50mb'
        };
    }
}

Setup Views Renderer

By override setupViews method of service, to enable and setup prefered view renderer.

The returned object for settings:

  • path: Where your views are located. Must be an absolute path. All rendered views are relative to this path
  • templateEngine: The loaded module of template engine
  • options: options object as parameter to koa-views
class MyHTTPService extends HTTPService{{ port: 8080 }} {
 
    async setupViews() {
 
        return {
            path: path.join(__dirname, '..', 'views'),
            templateEngine: require('pug'),
            options: {
                extension: 'pug',
                map: {
                    html: 'pug'
                }
            }
        };
    }
}

License

Licensed under the MIT License

Authors

Copyright(c) 2017 Fred Chien(錢逢祥) <cfsghost@gmail.com>