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

7 years ago

1.2.171

7 years ago

1.2.170

7 years ago

1.2.169

7 years ago

1.2.168

7 years ago

1.2.167

7 years ago

1.2.166

7 years ago

1.2.165

7 years ago

1.2.164

7 years ago

1.2.163

7 years ago

1.2.162

7 years ago

1.2.161

7 years ago

1.2.160

7 years ago

1.2.152

7 years ago

1.2.151

7 years ago

1.2.150

7 years ago

1.2.146

7 years ago

1.2.145

7 years ago

1.2.144

7 years ago

1.2.143

7 years ago

1.2.142

7 years ago

1.2.141

7 years ago

1.2.140

7 years ago

1.2.139

7 years ago

1.2.138

7 years ago

1.2.137

7 years ago

1.2.136

7 years ago

1.2.135

7 years ago

1.2.134

7 years ago

1.2.133

7 years ago

1.2.132

7 years ago

1.2.131

7 years ago

1.2.130

7 years ago

1.2.124

7 years ago

1.2.123

7 years ago

1.2.122

7 years ago

1.2.121

7 years ago

1.2.120

7 years ago

1.2.119

7 years ago

1.2.118

7 years ago

1.2.117

7 years ago

1.2.116

7 years ago

1.2.115

7 years ago

1.2.114

7 years ago

1.2.113

7 years ago

1.2.112

7 years ago

1.2.111

7 years ago

1.2.110

7 years ago

1.2.109

7 years ago

1.2.108

7 years ago

1.2.107

7 years ago

1.2.106

7 years ago

1.2.105

7 years ago

1.2.104

7 years ago

1.2.103

7 years ago

1.2.102

7 years ago

1.2.101

7 years ago

1.2.100

7 years ago

1.2.0

7 years ago

1.1.222

7 years ago

1.1.221

7 years ago

1.1.220

7 years ago

1.1.219

7 years ago

1.1.218

7 years ago

1.1.217

7 years ago

1.1.216

7 years ago

1.1.215

7 years ago

1.1.214

7 years ago

1.1.213

7 years ago

1.1.212

7 years ago

1.1.211

7 years ago

1.1.210

7 years ago

1.1.209

7 years ago

1.1.208

7 years ago

1.1.207

7 years ago

1.1.206

7 years ago

1.1.205

7 years ago

1.1.204

7 years ago

1.1.203

7 years ago

1.1.202

7 years ago

1.1.201

7 years ago

1.1.200

7 years ago

1.1.19

7 years ago

1.1.18

7 years ago

1.1.17

7 years ago

1.1.16

7 years ago

1.1.15

7 years ago

1.1.14

7 years ago

1.1.13

7 years ago

1.1.12

7 years ago

1.1.11

7 years ago

1.1.10

7 years ago

1.1.9

7 years ago

1.1.8

7 years ago

1.1.7

7 years ago

1.1.6

7 years ago

1.1.5

7 years ago

1.1.4

7 years ago

1.1.3

7 years ago

1.1.2

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.9

7 years ago

1.0.8

7 years ago

1.0.7

7 years ago

1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago