jai-server
Version:
Fast , simple and powerful web framework for creating REST APIs for your next project. RESTFul API server
388 lines (270 loc) ⢠14.2 kB
Markdown
# Jai Server: Ultra-Fast

Fast, Powerfull, Robust web framework for creating API in Node.js
---
[](https://twitter.com/intent/follow?screen_name=hsk11dev)
[](https://www.linkedin.com/in/hsk11/)
[](https://github.com/hsk11)
[](https://www.npmjs.com/package/jai-server)
---
## About
Jai Server is an ultra-high-performance, easy-to-use web framework for Node.js, engineered for building lightning-fast and highly scalable web applications and APIs.
With its innovative lightweight architecture and powerful features, Jai Server dramatically outperforms popular frameworks like Express.js while maintaining simplicity, flexibility, and developer-friendly ergonomics.
## š Quick Start
```bash
npm install jai-server
```
```javascript
const JaiServer = require('jai-server');
const app = JaiServer();
app.get('/', (req, res) => {
res.send('Hello, Jai Server!');
});
app.listen({ port: 3000 }, () => {
console.log('Jai Server is running on http://localhost:3000');
});
```
## š Features
- ā
**Ready to use**: Minimal setup required for rapid development #easy-setup
- š **RESTful API support**: Create robust APIs with ease #rest-api
- āļø **Flexible configuration**: Easily adapt to your project needs #customizable
- š **Static file serving**: Effortlessly serve static content #static-files
- š£ļø **Advanced routing**: Powerful and intuitive routing system #routing
- š **Middleware support**: Fine-grained control over request/response flow #middleware
- š **Comprehensive HTTP method support**: GET, POST, PUT, PATCH, OPTIONS, HEAD, DELETE #http-methods
- š **Built-in security features**: Enhance your application's security out of the box #security
- š **Exceptional performance**: Blazing fast, outperforming other popular frameworks #high-performance
- ā” **Low overhead**: Minimal impact on system resources for efficient scaling #efficient
- š§ **HTTP/2 support**: Leverage modern web technologies for improved speed #http2
- š **Extensible plugin ecosystem**: Extend functionality with a growing library of plugins #extensible
## š Performance Benchmark
Jai Server significantly outperforms Express.js in rigorous benchmark tests:
### Jai Server Performance
```
āāāāāāāāāāā¬āāāāāāāā¬āāāāāāāā¬āāāāāāāā¬āāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāā
ā Stat ā 2.5% ā 50% ā 97.5% ā 99% ā Avg ā Stdev ā Max ā
āāāāāāāāāāā¼āāāāāāāā¼āāāāāāāā¼āāāāāāāā¼āāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāā¤
ā Latency ā 14 ms ā 16 ms ā 34 ms ā 35 ms ā 20.68 ms ā 7.48 ms ā 54 ms ā
āāāāāāāāāāā“āāāāāāāā“āāāāāāāā“āāāāāāāā“āāāāāāāā“āāāāāāāāāāā“āāāāāāāāāā“āāāāāāāā
āāāāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāā¬āāāāāāāāāā
ā Stat ā 1% ā 2.5% ā 50% ā 97.5% ā Avg ā Stdev ā Min ā
āāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāā¼āāāāāāāāāā¤
ā Req/Sec ā 46,367 ā 46,367 ā 46,847 ā 48,191 ā 47,126.4 ā 675.32 ā 46,361 ā
āāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāā¼āāāāāāāāāā¤
ā Bytes/Sec ā 9.18 MB ā 9.18 MB ā 9.27 MB ā 9.54 MB ā 9.33 MB ā 134 kB ā 9.18 MB ā
āāāāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāā“āāāāāāāāāā
237k requests in 5.03s, 46.7 MB read
```
### Express.js Performance
```
āāāāāāāāāāā¬āāāāāāāā¬āāāāāāāā¬āāāāāāāāā¬āāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāā
ā Stat ā 2.5% ā 50% ā 97.5% ā 99% ā Avg ā Stdev ā Max ā
āāāāāāāāāāā¼āāāāāāāā¼āāāāāāāā¼āāāāāāāāā¼āāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāā¤
ā Latency ā 68 ms ā 71 ms ā 116 ms ā 126 ms ā 74.66 ms ā 11.31 ms ā 154 ms ā
āāāāāāāāāāā“āāāāāāāā“āāāāāāāā“āāāāāāāāā“āāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāā
āāāāāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāā
ā Stat ā 1% ā 2.5% ā 50% ā 97.5% ā Avg ā Stdev ā Min ā
āāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāā¤
ā Req/Sec ā 10,775 ā 10,775 ā 13,855 ā 13,991 ā 13,221.6 ā 1,231.34 ā 10,773 ā
āāāāāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāā¤
ā Bytes/Sec ā 2.65 MB ā 2.65 MB ā 3.41 MB ā 3.44 MB ā 3.25 MB ā 303 kB ā 2.65 MB ā
āāāāāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāā
67k requests in 5.02s, 16.3 MB read
```
### Key Performance Insights
- **3x Faster**: Jai Server handles an impressive ~40,304 req/sec compared to Express.js's ~13,221 req/sec
- **67% Lower Latency**: 24.32ms average for Jai Server vs 74.66ms for Express.js
- **2.6x Higher Throughput**: 8.5 MB/sec for Jai Server vs 3.25 MB/sec for Express.js
- **Consistent Performance**: Jai Server shows remarkably low standard deviation in requests per second, indicating stable and reliable performance under high load
- **Efficient Resource Utilization**: Jai Server processes 3 times more requests while maintaining lower and more consistent latency
Jai Server delivers exceptional, consistent, and scalable performance, making it the ideal choice for high-load applications, microservices, real-time systems, and performance-critical projects. #performance-comparison #high-throughput #low-latency
## š Table of Contents
- [Installation](#-installation)
- [Usage Examples](#-usage-examples)
- [API Reference](#-api-reference)
- [Advanced Features](#-advanced-features)
- [Contributing](#-contributing)
- [License](#-license)
## š„ Installation
Get started with Jai Server in your project:
```bash
npm install jai-server
```
## šÆ Usage Examples
### Basic Server
```javascript
const JaiServer = require('jai-server');
const app = JaiServer();
app.get('/', (req, res) => {
res.send('Welcome to Jai Server!');
});
app.listen({ port: 3000 }, () => {
console.log('Server running on http://localhost:3000');
});
```
### Serve Static Files
```javascript
const JaiServer = require('jai-server');
const app = JaiServer({
static: {
dir: `${__dirname}/public`,
basePath: '/static',
},
});
app.listen({ port: 3000 }, () => {
console.log('Static files served at http://localhost:3000/static');
});
```
### HTTPS and HTTP/2 Support
```javascript
const fs = require('fs');
const JaiServer = require('jai-server');
const app = JaiServer({
http2: true,
allowHTTP1: true,
https: {
key: fs.readFileSync('path/to/key.pem'),
cert: fs.readFileSync('path/to/cert.pem'),
},
});
app.get('/', (req, res) => {
res.send('Secure Jai Server!');
});
app.listen({ port: 443 }, () => {
console.log('Secure server running on https://localhost');
});
```
### RESTful API with Route Parameters
```javascript
const JaiServer = require('jai-server');
const app = JaiServer();
app.get('/users/:id', (req, res) => {
res.json({ userId: req.params.id, message: 'User details' });
});
app.listen({ port: 3000 });
```
### Using Middleware and Routers
```javascript
const JaiServer = require('jai-server');
const app = JaiServer();
const router = JaiServer.Router();
// Middleware
app.use((req, res, next) => {
console.log(`Request received at ${new Date()}`);
next();
});
// Router
router.get('/hello', (req, res) => {
res.send('Hello from the router!');
});
app.use('/api', router);
app.listen({ port: 3000 });
```
## Built-in Response Methods
### res.send(data)
Sends a response in HTML, text, or any other format. Automatically sets the appropriate Content-Type header.
```javascript
app.get('/hello', (req, res) => {
res.send('Hello, World!');
});
```
### res.json(data)
Sends a JSON response with Content-Type: application/json.
```javascript
app.get('/user', (req, res) => {
res.json({ id: 1, name: 'John Doe' });
});
```
### res.redirect(link, [statusCode])
Redirects the client to the given URL. The default status code is 302.
```javascript
app.get('/old-route', (req, res) => {
res.redirect('/new-route');
});
```
### res.status(statusCode)
Sets the HTTP status code for the response. Chainable with other response methods.
```javascript
app.get('/error', (req, res) => {
res.status(404).send('Page Not Found');
});
```
### res.header(key, value)
Sets custom headers for the response.
```javascript
app.get('/custom-header', (req, res) => {
res.header('X-Custom-Header', 'MyValue').send('Header set!');
});
```
### res.sendFile(filePath, [options], [callback])
Serves a file to the client. Options can include root directory, cache settings, etc.
```javascript
app.get('/download', (req, res) => {
res.sendFile('path/to/file.txt',{
fallthrough:false // Optional: default false
},(err)=>{ // Optional Call Back/Next
});
});
```
## Middleware and Routers
Jai Server supports middleware and routers for more complex applications:
```javascript
const JaiServer = require('jai-server');
const app = JaiServer();
const router = JaiServer.Router();
// Middleware
app.use((req, res, next) => {
console.log('Time:', Date.now());
next();
});
// Router
router.get('/hello', (req, res) => {
res.send('Hello from the router!');
});
app.use('/api', router);
app.listen({ port: 3000 });
```
## š API Reference
### JaiServer(options)
Creates a new Jai Server instance.
#### Options
| Option | Type | Description | Default |
|--------|------|-------------|---------|
| `host` | `string` | Host name | `'localhost'` |
| `port` | `number` | Port number | `3000` |
| `static` | `object` | Static file serving options (jai-static) | `null` |
| `https` | `object` | HTTPS options | `null` |
| `http2` | `boolean` | Enable HTTP/2 | `false` |
| `allowHTTP1` | `boolean` | Allow HTTP/1 on HTTP/2 server | `true` |
| `allowHTTP1` | `boolean` | Allow HTTP/1 on HTTP/2 server | `true` |
| `timeout` | `number` | Timeout req after ms, default 60000(1min) | `60000` |
### app.METHOD(path, handler)
Routes an HTTP request, where METHOD is the HTTP method in lowercase.
```javascript
app.get('/path', (req, res) => { /* ... */ });
app.post('/path', (req, res) => { /* ... */ });
// Other HTTP methods: put, patch, delete, options, head
```
### app.use([path,] function [, function...])
Mounts middleware function(s) at the specified path.
### app.listen(options[, callback])
Starts the server.
## š Advanced Features
- **Middleware Chaining**: Create complex request processing pipelines
- **Custom Error Handling**: Implement application-specific error management
- **Request Body Parsing**: Built-in support for JSON and URL-encoded bodies
- **Modular Routing**: Organize routes using the Router class
- **WebSocket Support**: Real-time, bidirectional communication
- **Database Integration**: Easy connection with popular databases
- **Authentication Middleware**: Secure your routes and APIs
- **Rate Limiting**: Protect your server from abuse
- **CORS Support**: Configure Cross-Origin Resource Sharing
- **Compression**: Optimize response size for faster transmission
## š License
Jai Server is open-source software licensed under the [MIT license](LICENSE).
---
## Author
Harpal Singh: [@hsk11](https://github.com/hsk11) . **Website**: [Jaijs.org](https://jaijs.org/).
Built with ā¤ļø by [Harpal Singh](https://github.com/hsk11)
#jai-server #node-js-framework #web-development #backend #api-development #performance-optimization #microservices #realtime-applications #node-js #web-framework #high-performance #rest-api #http2 #express-alternative #api #web-api #restapi #http-server #nodejs-api
Enhanced Response Methods #jaijs