@guseyn/cutie-rest
v1.0.7
Published
Cutie extension for using REST (based on cutie-http) in Node.
Downloads
10
Readme
cutie-rest
Cutie extension for using REST (based on cutie-http) in Node.
Cutie extension for fs module in Node. It's based on the Async Tree Pattern.
Usage
const {
// Needed async objects here from the table below
} = require('@guseyn/cutie-rest');
This library provides following objects: Backend
, RestApi
, ServingFiles
, CachedServingFiles
and Method
, NotFoundMethod
interfaces.
| Object | Parameters | Description |
| ------ | -----------| ----------- |
| Backend | port
(number), host
(string), api
(RestApi
)| Declares backend server(just http for now) on specified port
and host
, also it provides declared api
(REST).|
| RestApi | ...methods(classes that extend Method
) | Declares methods of api. |
| Method | regexp
(RegExp
), method (string) | Declares a method(in api) with url that matches regexp
and specified method
('GET', 'POST', etc.). This class has a method invoke(request, response)
that needs to be overridden.|
| ServingFiles | regexp
(RegExp
), mapper (function(url)
), notFoundMethod
(Method
) | Extends Method
and serves files on url that mathes regexp
with mapper
function that gets location of a file on a disk by the url. Also it's required to declare notFoundMethod
that handles the cases when a file is not found. |
| CachedServingFiles | regexp
(RegExp
), mapper
(function(url)
), notFoundMethod
(Method
) | Does the same that ServingFiles
does and caches files for increasing speed of serving them. |
| NotFoundMethod | regexp
(RegExp
) | Method is used in RestApi
, ServingFiles
, CachedServingFiles
for declaring method on 404(NOT_FOUND) status. |
Example
'use strict'
const path = require('path');
const {
Backend,
RestApi,
CachedServingFiles
} = require('@guseyn/cutie-rest');
const GeneratedResponse = require('./GeneratedResponse');
const CustomNotFoundMethod = require('./CustomNotFoundMethod');
const notFoundMethod = new CustomNotFoundMethod(new RegExp(/\/not-found/));
const mapper = (url) => {
let paths = url.split('/').filter(path => path !== '');
return path.join(...paths);
}
new Backend(8080, '127.0.0.1', new RestApi(
new GeneratedResponse(new RegExp(/\/response/), 'GET'),
new CachedServingFiles(new RegExp(/\/files/), mapper, notFoundMethod),
notFoundMethod
)).run();
CustomNotFoundMethod
'use strict'
const { NotFoundMethod } = require('./NotFoundMethod');
class CustomNotFoundMethod extends NotFoundMethod {
constructor(regexpUrl) {
super(regexpUrl);
}
}
module.exports = CustomNotFoundMethod;
GeneratedResponse
This class also uses cutie-http
'use strict'
const { Method } = require('@guseyn/cutie-rest');
const {
EndedResponse,
WrittenResponse,
ResponseWithWrittenHead
} = require('@guseyn/cutie-http');
class GeneratedResponse extends Method {
constructor(regexpUrl, type) {
super(regexpUrl, type);
}
invoke(request, response) {
new EndedResponse(
new WrittenResponse(
new ResponseWithWrittenHead(
response, 200, 'ok', {
'Content-Type': 'text/plain'
}
), 'content ... '
), `is delivered`
).call();
}
}
module.exports = GeneratedResponse;