4crud
v2.1.0
Published
Fast nodejs module for API development
Downloads
24
Maintainers
Readme
4Crud
VERY SMALL (7kb) and fast Node.js module for API development written with ES6 features.
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
- GH3S - Initial work - [email protected]
License
This project is licensed under the MIT License - see the LICENSE file for details
Contributing
- Fork it (https://github.com/gh3s/4crud/fork)
- Create your feature branch (
git checkout -b feature/fooBar
) - Commit your changes (
git commit -am 'Add some fooBar'
) - Push to the branch (
git push origin feature/fooBar
) - Create a new Pull Request