1.0.1 • Published 4 years ago
mkserv v1.0.1
MkServ
Wrapper for Node.js HTTP module with support for Middleware.
Because there weren't enough HTTP libraries for Node.js already.
Features
- Works
- Tests written (need help with this!)
Example
Here's an example using the native HTTP module:
const { createServer } = require('http');
const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');
const adapter = new FileSync('data/messages.json');
const db = low(adapter);
createServer((req, res) => {
console.log(`Incoming request ${req.url}`);
if (req.method === 'GET') {
if (req.url === '/') {
res.end('Hello, World!');
} else if (req.url === '/messages') {
res.end(JSON.stringify(db.get('messages'.value())));
} else {
console.log(`Cannot GET ${req.url}`);
}
} else if (req.method === 'POST') {
if (req.url === '/messages') {
req.body = [];
req
.on('data', chunk => {
req.body.push(chunk);
})
.on('end', () => {
req.body = Buffer.concat(req.body).toString();
db.get('messages')
.push(JSON.parse(req.body))
.write();
res.end('ok');
});
} else {
console.log(`Cannot POST ${req.url}`);
}
} else {
console.log(`Cannot ${req.method} ${req.url}`);
}
}).listen(8080, () => {
console.log('Server listening on port 8080');
});
... and here's the same example, now using MkServ:
const { mkServ, applyMiddleware, bodyMiddleware } = require('mkserv');
const { routerMiddleware, get, post } = require('mkserv-router');
const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');
const adapter = new FileSync('data/messages.json');
const db = low(adapter);
db.defaults({ messages: [] }).write();
mkServ()
.middleware((req, res, next) => {
console.log(`Incoming request ${req.url}`);
next();
})
.middleware(
routerMiddleware([
get('/', (req, res) => {
res.end('Hello, World!');
}),
get('/messages', (req, res) => {
res.end(JSON.stringify(db.get('messages').value()));
}),
post(
'/messages',
applyMiddleware([bodyMiddleware()], (req, res) => {
db.get('messages')
.push(JSON.parse(req.body))
.write();
res.end('ok');
})
)
])
)
.listen(8080, () => {
console.log('Server listening on port 8080.');
});
API
mkServ(): MkServInstance
Wrapper to create new MkServInstance
Returns MkServInstance
Example
mkServ()
...
MkServInstance.middleware(middleware: (res, req, next) => void): MkServInstance
Installs Middleware to the server
Parameters
middleware: (res, req, next) => void
- The Middleware
Returns MkServInstance
Example
mkServ()
.middleware((res, req, next) => {
console.log(`Incoming request ${req.url}`);
next();
})
...
MkServInstance.listen(port: number, callback: () => void)
Start the server and listen to a specific port number
Parameters
port: number
- The port numbercallback: () => void
- Function to call when server is listening
Example
mkServ()
...
.listen(8080, () => {
console.log('Server listening on port 8080');
});
applyMiddleware(middlewares: Array<(req, res, next) => void>, handler: (req, res, next) => void): (req, res, next) => void
Applies a Middleware chain onto a specific Middleware function
Parameters
middlewares: Array<(req, res, next) => void>
- The Middleware chain to applyhandler: (req, res, next) => void
- The specific Middleware function
Returns (req, res, next) => void
Example
mkServ()
.middleware(applyMiddleware([bodyMiddleware()], (req, res, next) => {
console.log(`Body: ${req.body}`);
next();
}))
...
bodyMiddleware(): (req, res, next) => void
Middleware to fetch Request body
Returns (req, res, next) => void
Example
mkServ()
.middleware(bodyMiddleware())
...