@nanobot248/rxstack-express-http2-server
v0.1.1
Published
RxStack express server module supporting http2 (via spdy)
Downloads
7
Readme
RxStack express server module with HTTP2 support
The ExpressServer module integrates expressjs
in rxstack framework
and uses spdy
for HTTP2 support.
Based on the express-server
moudule of the RxStack project.
Tests have not yet been adapted as the originally used request-promise
package is deprecated.
Installation
npm install @nanobot248/rxstack-express-http2-server --save
// peerDependencies
npm install @rxstack/async-event-dispatcher@^0.5 @rxstack/core@^0.6 @rxstack/exceptions@^0.5 winston@^3.2.1
Documentation
Setup
ExpressHttp2Server
module needs to be registered in the application
. Let's create the application:
import {Application, ApplicationOptions} from '@rxstack/core';
import {ExpressHttp2Module} from '@nanobot248/rxstack-express-http2-server';
export const EXPRESS_APP_OPTIONS: ApplicationOptions = {
imports: [
ExpressHttp2Module.configure({
'host': 'localhost',
'port': 3000,
'prefix': '/api',
'http2': true,
'http': true,
'tlsCertificateFile': './path/to/certificate.pem',
'tlsKeyFile': './path/to/key.pem'
})
],
servers: ['express-http2'], //enables the server
providers: [
// ...
]
};
new Application(EXPRESS_APP_OPTIONS).start();
Module Options
The module accepts the following options:
host
: the server host, ex:127.0.0.1
or0.0.0.0
(for docker). By default is set tolocalhost
port
: the server port. By default is set to3000
prefix
: the prefix for each route, ex: '/api/products. By default is set tonull
http2
: activate HTTP2 (and HTTP 1.1) support.tlsCertificateFile
andtlsKeyFile
are required in this case as only secure HTTP2/HTTP1.1 over TLS are supported.https
: ifhttp2
is false, only HTTP 1.1 will be made available over TLS (aka HTTPS). If neitherhttp2
norhttps
are true, a simple HTTP 1.1 server without TLS will be created.tlsCertificateFile
: the path of the PEM formatted certificate file.tlsKeyFile
: the path of the PEM formatted key file.
Express Options
In order to configure expressjs
application you need to listen to ServerEvents.CONFIGURE
.
import {ServerEvents, ServerConfigurationEvent, InjectorAwareInterface} from '@rxstack/core';
import {ExpressHttp2Server} from '@rxstack/express-http2-server';
import {Observe} from '@rxstack/async-event-dispatcher';
import {Injectable, Injector} from 'injection-js';
import {Application} from 'express';
@Injectable()
export class ConfigurationListener implements InjectorAwareInterface {
private injector: Injector;
setInjector(injector: Injector): void {
this.injector = injector;
}
@Observe(ServerEvents.CONFIGURE)
async onConfigure(event: ServerConfigurationEvent): Promise<void> {
if (event.server.getName() !== ExpressHttp2Server.serverName) {
return;
}
const app: Application = event.server.getEngine();
// register any express middleware
}
}
Express Middleware
In addition to rxstack controllers you can register express middleware to you application.
Important: If response is sent then native express middleware will bypass
kernel
.
import {
Request as ExpressRequest, Response as ExpressResponse,
NextFunction, RequestHandler
} from 'express';
import {Injector} from 'injection-js';
export function myCustomExpressMiddleware(injector: Injector): RequestHandler {
return (request: ExpressRequest, response: ExpressResponse, next: NextFunction): void => {
response.json({'id': 'express'});
};
}
You need to register myCustomExpressMiddleware
in the express
application by using ConfigurationListener
.
/// ...
const app: Application;
app.get('/my-custom-express-middleware', expressMiddleware(this.injector));
You need to register the listener in the application providers
You can get any of the registered services from injector
.
License
Licensed under the MIT license.