1.5.0 • Published 5 years ago

deadlockjs v1.5.0

Weekly downloads
45
License
ISC
Repository
github
Last release
5 years ago

npm.io

intro

Lightweight Node.js/Express framework written in TypeScript for building secured, clustered and well-designed APIs.

install

The easiest way to install deadlock.js is with npm.

npm i --save deadlockjs

features

Here are the main features provided by deadlock.js

  • full API specification in a single object
  • rate limit - delay and drop requests
  • ip whitelist&blacklist for rate limit
  • request caching
  • mysql pool
  • mongodb
  • request body parsing, validation and filtering
  • clustering
  • file upload
  • cors handling
  • https & http2 Support
  • logs
  • internal statistics (hits, execution time)
  • internal api (retrieve stats, dynamically change route, ip blacklist/whitelist, etc)

examples

hello world

Here is a simple working example

const DeadLock = require('deadlockjs').DeadLock;

const api = {
    routes: {
        '/': async () => "Hello World"
    }
};

DeadLock
    .startApp(api)
    .then(() => console.log("Server started"));

That's all you need to get your web server up and running!

complex example

Here is an example of a web app with custom middleware, rate limit, mysql connection, and request body validation

import {APIDescription, APIRouteType, DeadLock, RequestLocal} from "deadlockjs";
import {ObjectFilter, RegExpFilter, ValueTypeFilter} from "io-filter";

const api: APIDescription = {
    
    // 4 process will be spawn
    workers: 4,
    
    // authorize incoming requests from this url
    cors: {origin: "http://localhost:3000"},
    
    // port to listen to
    port: 3000,
    
    // Mysql pool configuration
    db: {
        mysql: {
            port: 3306,
            host: 'localhost',
            user: 'myuser',
            password: 'mypassword',
            database: 'mydatabase',
            connectionLimit: 100
        }
    },
    
    // list of forbidden ips
    ipBlacklist: [],
    
    // rate limit configuration
    rateLimit: {
        
        // these ips are not rate limited
        ipWhitelist: ['::1'],
        
        // default weight of a end-point
        weight: 10,
        
        // maximum number of pending requests
        maxPending: 0,
        
        // allowed weight per second
        // in this case a client can make up to 10 requests per second by default
        maxWeightPerSec: 100
    },
    
    // activates the cache system
    cache: {
        
        // default expiration time
        expire: 2000
    },
    
    // api basepath
    basePath: '/api/v1',
    
    // global middleware
    middleware: async (req: express.Request, res: express.Response) => {
        if (Math.random() < 0.5)
            throw new Error("Not allowed");
    },
    
    // routes
    routes: {
        
        // available on /api/v1/login
        '/login': {
            
            // route method
            method: 'post',
            
            // weight of this end-point
            rateLimit: {weight: 80},
            
            // POST data must be set and match this filter
            paramFilter: new ObjectFilter({
                pseudo: new RegExpFilter(/^[a-zA-Z0-9]{3,20}$/),
                password: new ValueTypeFilter('string')
            }),
            
            // is a mysql connection needed?
            db: {mysql: true},
            
            // set custom cache expiration time
            cache: {
                
                // to 1s
                expire: 1000
            },
            
            // request handler function
            handler: async (dl: RequestLocal) => {
                // dl.mysql -> MySQL Pool Connection
                // dl.requestInfo.params -> {pseudo: string, password: string}
                return {a: Math.random()};
            }
        }
    }
};

DeadLock
    .startApp(api)
    .then(() => console.log("Server started"));

Each worker will allocate a MySQL Pool with 'connectionLimit' connections.

1.5.0

5 years ago

1.4.18

6 years ago

1.4.17

6 years ago

1.4.16

6 years ago

1.4.15

7 years ago

1.4.14

7 years ago

1.4.13

7 years ago

1.4.12

7 years ago

1.4.11

7 years ago

1.4.10

7 years ago

1.4.9

7 years ago

1.4.8

7 years ago

1.4.7

7 years ago

1.4.6

7 years ago

1.4.5

7 years ago

1.4.4

7 years ago

1.4.3

7 years ago

1.4.2

7 years ago

1.4.1

7 years ago

1.4.0

7 years ago

1.3.0

7 years ago

1.2.74

7 years ago

1.2.73

7 years ago

1.2.72

7 years ago

1.2.71

7 years ago

1.2.70

7 years ago

1.2.69

7 years ago

1.2.67

7 years ago

1.2.66

7 years ago

1.2.65

7 years ago

1.2.64

7 years ago

1.2.63

7 years ago

1.2.62

7 years ago

1.2.61

7 years ago

1.2.6

7 years ago

1.2.5

7 years ago

1.2.4

7 years ago

1.2.310

7 years ago

1.2.309

7 years ago

1.2.308

7 years ago

1.2.307

7 years ago

1.2.306

7 years ago

1.2.305

7 years ago

1.2.304

7 years ago

1.2.303

7 years ago

1.2.302

7 years ago

1.2.301

7 years ago

1.2.300

7 years ago

1.2.207

7 years ago

1.2.206

7 years ago

1.2.205

7 years ago

1.2.204

7 years ago

1.2.203

7 years ago

1.2.202

7 years ago

1.2.201

7 years ago

1.2.200

7 years ago

1.2.198

7 years ago

1.2.197

7 years ago

1.2.196

7 years ago

1.2.195

7 years ago

1.2.194

7 years ago

1.2.193

7 years ago

1.2.192

7 years ago

1.2.191

7 years ago

1.2.190

7 years ago

1.2.186

7 years ago

1.2.185

7 years ago

1.2.184

7 years ago

1.2.183

7 years ago

1.2.182

7 years ago

1.2.181

7 years ago

1.2.180

7 years ago

1.2.179

7 years ago

1.2.178

7 years ago

1.2.177

7 years ago

1.2.176

7 years ago

1.2.175

7 years ago

1.2.174

7 years ago

1.2.172

8 years ago

1.2.171

8 years ago

1.2.170

8 years ago

1.2.169

8 years ago

1.2.168

8 years ago

1.2.167

8 years ago

1.2.166

8 years ago

1.2.165

8 years ago

1.2.164

8 years ago

1.2.163

8 years ago

1.2.162

8 years ago

1.2.161

8 years ago

1.2.160

8 years ago

1.2.152

8 years ago

1.2.151

8 years ago

1.2.150

8 years ago

1.2.146

8 years ago

1.2.145

8 years ago

1.2.144

8 years ago

1.2.143

8 years ago

1.2.142

8 years ago

1.2.141

8 years ago

1.2.140

8 years ago

1.2.139

8 years ago

1.2.138

8 years ago

1.2.137

8 years ago

1.2.136

8 years ago

1.2.135

8 years ago

1.2.134

8 years ago

1.2.133

8 years ago

1.2.132

8 years ago

1.2.131

8 years ago

1.2.130

8 years ago

1.2.124

8 years ago

1.2.123

8 years ago

1.2.122

8 years ago

1.2.121

8 years ago

1.2.120

8 years ago

1.2.119

8 years ago

1.2.118

8 years ago

1.2.117

8 years ago

1.2.116

8 years ago

1.2.115

8 years ago

1.2.114

8 years ago

1.2.113

8 years ago

1.2.112

8 years ago

1.2.111

8 years ago

1.2.110

8 years ago

1.2.109

8 years ago

1.2.108

8 years ago

1.2.107

8 years ago

1.2.106

8 years ago

1.2.105

8 years ago

1.2.104

8 years ago

1.2.103

8 years ago

1.2.102

8 years ago

1.2.101

8 years ago

1.2.100

8 years ago

1.2.0

8 years ago

1.1.222

8 years ago

1.1.221

8 years ago

1.1.220

8 years ago

1.1.219

8 years ago

1.1.218

8 years ago

1.1.217

8 years ago

1.1.216

8 years ago

1.1.215

8 years ago

1.1.214

8 years ago

1.1.213

8 years ago

1.1.212

8 years ago

1.1.211

8 years ago

1.1.210

8 years ago

1.1.209

8 years ago

1.1.208

8 years ago

1.1.207

8 years ago

1.1.206

8 years ago

1.1.205

8 years ago

1.1.204

8 years ago

1.1.203

8 years ago

1.1.202

8 years ago

1.1.201

8 years ago

1.1.200

8 years ago

1.1.19

8 years ago

1.1.18

8 years ago

1.1.17

8 years ago

1.1.16

8 years ago

1.1.15

8 years ago

1.1.14

8 years ago

1.1.13

8 years ago

1.1.12

8 years ago

1.1.11

8 years ago

1.1.10

8 years ago

1.1.9

8 years ago

1.1.8

8 years ago

1.1.7

8 years ago

1.1.6

8 years ago

1.1.5

8 years ago

1.1.4

8 years ago

1.1.3

8 years ago

1.1.2

8 years ago

1.1.1

8 years ago

1.1.0

8 years ago

1.0.9

8 years ago

1.0.8

8 years ago

1.0.7

8 years ago

1.0.6

8 years ago

1.0.5

8 years ago

1.0.4

8 years ago

1.0.3

8 years ago

1.0.2

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago