Skip to content

gh3s/4crud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

4Crud

VERY SMALL (7kb) and fast Node.js module for API development written with ES6 features.

Maintenance HitCount npm

Getting Started

A fast and VERY SMALL Node.js framework for API development using HTTPS written with javascript ES6 features.

Prerequisites

  • nodejs 12.x +

Installing

npm install 4crud --save

Testing

This project uses Mocha-Chai combination in /test folder

npm test

or

node test/server.js

and in other cli type:

curl localhost:3000/getroute1?name=john

curl -X POST -H "Content-Type: application/json" -d '{"name":"john","password":"abc"}' localhost:3000/postroute1

Features

  • HTTPS or HTTP
  • Routing
  • Fast performance (Remember, ES6 have some intrinsic slowdowns but yes, it's fastest as express.js!)
  • Fast implementation on any type of API
  • Very small (just 15 KB!)

Usage

const Server = require('4crud')
const fs = require('fs') //Only for https

const privateKey = fs.readFileSync([PRIVATEKEYPATH], 'utf8') //Only for https
const certificate = fs.readFileSync([CERTIFICATEPATH], 'utf8') //Only for https

const credentials = {
  key: privateKey,
  cert: certificate,
  passphrase: [PASS] //if exists
} //Only for https

const server = new Server()

server
  // curl localhost:3000/getroute1?name=john
  .get('/route1', (req, res) => {
    console.log(`GET on route 1 with name: ${req.search.get('name')}`)
    res.statusCode = 200
    res.setHeader('Content-Type', 'application/json')
    res.end(JSON.stringify(req.url))
  })
  .get('/route2', (req, res) => {
    //console.log('GET on route 2')
    res.statusCode = 200
    res.setHeader('Content-Type', 'application/json')
    res.end('Hello')
  })
  // curl -X POST -H "Content-Type: application/json" -d '{"name":"john","password":"abc"}' localhost:3000/postroute1
  .post('/route1', (req, res) => {
    console.log(`POST route 1 with name ${req.body.name}`)
    res.statusCode = 200
    res.setHeader('Content-Type', 'application/json')
    res.end(JSON.stringify(req.body))
  })
  .post('/route2', (req, res) => {
    console.log('POST on route 2')
    res.statusCode = 200
    res.setHeader('Content-Type', 'application/json')
    res.end(JSON.stringify(req.body))
  })
  .put('/route1', (req, res) => {
    console.log('PUT on route 1')
    res.statusCode = 200
    res.setHeader('Content-Type', 'application/json')
    res.end(JSON.stringify(req.body))
  })
  .delete('/route2', (req, res) => {
    console.log(`DELETE on route 1 with name ${req.body.name}`)
    res.statusCode = 200
    res.setHeader('Content-Type', 'application/json')
    res.end(JSON.stringify(req.body))
  })
  .start(3000, credentials) // start server at port 3000

Express.js comparison

Bellow the benchmark uses wrk (https://github.com/wg/wrk/wiki/Installing-Wrk-on-Linux)

Run on your preferred CLI on /test folder with server on:

wrk -t8 -c100 -d30s http://localhost:3000/getroute1
Framework Requests/second Size(kB)
Express ~05500 260
4crud ~15100 15
Native ~19000 -

Running

npm start

Release History

  • 0.1.0
    • Basic routing implemented
  • 0.1.5
    • File server example added
    • Bugs fixed
    • Benchmark corrected
  • 1.0.1
    • Vulnerability corrections and production release
  • 2.0.0
    • HTTP protocol supressed. HTTPS implemented as the only protocol.
    • Bugs fixed.
  • 2.1.0
    • HTTPS and HTTP working together

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

Contributing

  1. Fork it (https://github.com/gh3s/4crud/fork)
  2. Create your feature branch (git checkout -b feature/fooBar)
  3. Commit your changes (git commit -am 'Add some fooBar')
  4. Push to the branch (git push origin feature/fooBar)
  5. Create a new Pull Request

About

Fast nodejs http client for API development

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published