@dkx/http-server
v1.5.0
Published
Minimalistic HTTP server
Readme
DKX/Http/Server
Super simple HTTP server with middlewares support for node.js.
Installation
$ npm install --save @dkx/http-serveror with yarn
$ yarn add @dkx/http-serverBasic usage
const {Server} = require('@dkx/http-server');
const {someRandomMiddleware} = require('some-random-middleware');
const app = new Server;
app.use(someRandomMiddleware);
app.run(8080, () => {
console.log('Server is running on port 8080');
});Writing middlewares
Each middleware is just an ordinary async function.
Middleware must call the next function with current response.
const {Server} = require('@dkx/http-server');
async function appendHeaderMiddleware(request, response, next)
{
response = response.withHeader('X-My-custom-header', 'hello world');
return next(response);
}
const app = new Server;
app.use(appendHeaderMiddleware);Writing response data
function writeResponseDataMiddleware(request, response, next)
{
response.write('hello');
response.write(' ');
response.write('world');
return next(response);
}Passing data between middlewares
function middlewareA(request, response, next, state)
{
state.message = 'hello world';
return next(response);
}
function middlewareB(request, response, next, state)
{
console.log(state.message); // output: hello world
return next(response);
}Testing middlewares
Testing new middlewares is really easy with the built in helper function. It construct all the necessary objects and runs the middleware for you.
const {testMiddleware} = require('@dkx/http-server');
function myUselessMiddleware(request, response, next)
{
response.write('hello world');
response = response.withHeader('X-Middleware-header', 'lorem ipsum');
return next(response);
}
const data = [];
const response = await testMiddleware(myUselessMiddleware, {
method: 'POST',
url: '/v1/users/5',
body: 'some HTTP body',
headers: {
'X-My-custom-http-header': 'hello world'
},
state: {
msg: 'My custom shared state'
},
onBodyWrite: function(chunk) {
data.push(chunk.toString());
},
next: async function(res) {
console.log('Custom next function called');
return res;
},
});
console.log(response.getHeader('X-Middleware-header')); // output: "lorem ipsum"
console.log(data); // output: ["hello world"]The testMiddleware function can be used just with your middleware:
testMiddleware(myUselessMiddleware);Server object
useAppend middleware.
Arguments:
middleware: Middleware: middleware to attach.run()Start the HTTP server.
Arguments:
port: number: port where the HTTP server will be listening for new requests.fn: () => void: callback called when server is ready to handle requests.close()Stop running HTTP server.
Arguments:
fn: () => void: callback called when server is completely shut down.middleware()Run custom
RequestandResponse.Arguments:
request: Request: CustomRequestobjectresponse: Response: CustomResponseobjectReturn:
Promise<Response>: New response after running through the middleware stack.
Request object
methodContains request method (
GET,POST, ...).urlContains requested URL.
headersContains request HTTP headers.
bodyReadable stream for accessing request data.
hasHeader()Test if header exists.
Arguments:
name: string: Name of header.Return:
booleangetHeader()Return HTTP header.
Arguments:
name: string: Name of header.Return:
string|Array<string>|undefined
Response object
The Response is an immutable object.
statusCodeResponse status code, default
200.statusMessageResponse status message, default is an empty string.
headersContains list of currently returned HTTP headers.
write()Method for writing data into response body.
Arguments:
chunk: any: data to write.withStatus()Write response status.
Arguments:
code: number: new response status code.message: string: new response status message, default is an empty string.Return:
Response: clonedResponseobject with modified status.hasHeader()Check whether header exists.
Arguments:
name: string: name of HTTP header to check.Return:
booleangetHeader()Get HTTP response header.
Arguments:
name: string: name of HTTP header.defaultValue: undefined|string|number|Array<string>: default value to return if HTTP header does not exists.Return:
undefined|string|number|Array<string>withHeader()Write response header.
Arguments:
name: string: name of the new header.value: string: value of the new header.Return:
Response: clonedResponseobject with modified headers.withVaryHeader()Write vary HTTP response header.
Arguments:
field: string|Array<string>: name of header you wish to add into vary headerReturn:
Response: clonedResponseobject with modified headers.removeHeader()Remove response header.
Arguments:
name: string: name of the removed header.Return:
Response: clonedResponseobject with modified headers.
ResponseBody object
Writable stream for writing the response data.
write()Write response chunk
Arguments:
chunk: chunk of data to write.
