Streamify your web server

Downloads in past


211.0.193 years ago6 years agoMinified + gzip package size for damless in KB


DamLess help you to create a NodeJS stream api (with http chunk). Develop your http server like a gulp script. !NPMnpm-imagenpm-url !Build Statustravis-imagetravis-url Coverage Status !NPM Downloadnpm-image-downloadnpm-url !Dependencies Statusdavid-dm-imagedavid-dm-url ```server.js const DamLess = require("damless"); const damless = new DamLess(); damless
.config({ http: { port: 3000 }})
.inject("info", "./services/info")
.inject("user", "./services/user")
.get("/helloworld", "info", "helloworld")
.post("/user", "user", "insertOne")
``` ```./services/info.js class Info {
// helloworld is declare as GET:/helloworld
helloworld(context, stream, headers) {
} ``` ```./services/user.js const { Transform } = require("stream"); class User {
insertOne(context, stream, headers) {
// Read a JSON stream request and write a response as a JSON stream.
.pipe(new Transform({
objectMode: true,
transform(chunk, enc, callback) {
// save the chunk (user) in the database
callback(null, chunk);
} ``` ```shell npm install damless --save ```
Dependency Injection (context, stream, headers) like http2 interface


```services/info.js class ServiceInfo { }; text(context, stream, headers) { stream.write("Hello"); stream.end("world") }; json(context, stream, headers) {  stream.write({ name: "peter" });  stream.end({ name: "folk" }); }; exports = module.exports = ServiceInfo; ```

Dependency Injection

DamLess use givemetheservice to inject all services. You can override all damless functions or inject your new services. It's is easier to test your api.

(context, stream, headers) -> http2 interface

DamLess has been inspired by the http2 syntax. The request and response are wrap by an unique duplex stream. This stream automatically stringify, gzip or deflate your response. It is useless to pipe a compressor.

Extend services

Use the power of ES6 to easily extends services. ```json.js const { Json } = require("damless"); const moment = require("moment"); const { ObjectID } = require("bson"); class CustomJson extends Json {
constructor() {
// override the default onValue to deserialize mongo ObjectID
onValue(key, value) {
if (/\d{2}-\d{2}-\d{2}/.test(value)) return moment(value, "YYYY-MM-DD").toDate();
if (ObjectID.isValid(value)) return new ObjectID(value);
return super.onValue(key, value);
} exports = module.exports = CustomJson; ``` The default json serializer is declared in the DI as "json". Replace it to load your service. ```server.js damless
.inject("json", "./custom-json.js")

Develop faster

mongo nodemailer

Configuration manager (damless.json)

You can configure damless in javascript or via json file. ```server.js damless
.config({ http: { port: 3000 }})
.config(config => {
config.env = "dev"
``` ```damless.json {
"services": "./services.json",
"http": {
"port": 3000
} ``` You can declare your services in an other json file. ```services.json {
"services": [
"name": "info",
"location": "./services/info"
"http-routes": [
"get": "/",
"service": "info",
"method": "text"
} ``` Retrieve the config object in your service. ```.js class ServiceInfo {
// config will be injected by our DI
constructor(config) {
}; ```

You want to see some examples

To run our examples, clone the Damless repo and install the dependencies. ```bash $ git clone https://github.com/BenoitClaveau/damless --depth 1 $ cd damless $ npm install $ cd exemples/helloworld $ node server.js ```


To run our tests, clone the Damless repo and install the dependencies. ```bash $ git clone https://github.com/BenoitClaveau/damless --depth 1 $ cd damless $ npm install $ cd tests $ node.exe "../nodemodules/mocha/bin/mocha" . ```