1.5.0 • Published 4 years ago

deadlockjs v1.5.0

Weekly downloads
45
License
ISC
Repository
github
Last release
4 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

4 years ago

1.4.18

5 years ago

1.4.17

5 years ago

1.4.16

5 years ago

1.4.15

6 years ago

1.4.14

6 years ago

1.4.13

6 years ago

1.4.12

6 years ago

1.4.11

6 years ago

1.4.10

6 years ago

1.4.9

6 years ago

1.4.8

6 years ago

1.4.7

6 years ago

1.4.6

6 years ago

1.4.5

6 years ago

1.4.4

6 years ago

1.4.3

6 years ago

1.4.2

6 years ago

1.4.1

6 years ago

1.4.0

6 years ago

1.3.0

6 years ago

1.2.74

6 years ago

1.2.73

6 years ago

1.2.72

6 years ago

1.2.71

6 years ago

1.2.70

6 years ago

1.2.69

6 years ago

1.2.67

6 years ago

1.2.66

6 years ago

1.2.65

6 years ago

1.2.64

6 years ago

1.2.63

6 years ago

1.2.62

6 years ago

1.2.61

6 years ago

1.2.6

6 years ago

1.2.5

6 years ago

1.2.4

6 years ago

1.2.310

6 years ago

1.2.309

6 years ago

1.2.308

6 years ago

1.2.307

6 years ago

1.2.306

6 years ago

1.2.305

6 years ago

1.2.304

6 years ago

1.2.303

6 years ago

1.2.302

6 years ago

1.2.301

6 years ago

1.2.300

6 years ago

1.2.207

6 years ago

1.2.206

6 years ago

1.2.205

6 years ago

1.2.204

6 years ago

1.2.203

6 years ago

1.2.202

6 years ago

1.2.201

6 years ago

1.2.200

6 years ago

1.2.198

6 years ago

1.2.197

6 years ago

1.2.196

6 years ago

1.2.195

6 years ago

1.2.194

6 years ago

1.2.193

6 years ago

1.2.192

6 years ago

1.2.191

6 years ago

1.2.190

6 years ago

1.2.186

6 years ago

1.2.185

6 years ago

1.2.184

6 years ago

1.2.183

6 years ago

1.2.182

6 years ago

1.2.181

6 years ago

1.2.180

6 years ago

1.2.179

6 years ago

1.2.178

6 years ago

1.2.177

6 years ago

1.2.176

6 years ago

1.2.175

6 years ago

1.2.174

6 years ago

1.2.172

6 years ago

1.2.171

6 years ago

1.2.170

6 years ago

1.2.169

6 years ago

1.2.168

6 years ago

1.2.167

6 years ago

1.2.166

6 years ago

1.2.165

6 years ago

1.2.164

6 years ago

1.2.163

6 years ago

1.2.162

6 years ago

1.2.161

6 years ago

1.2.160

6 years ago

1.2.152

6 years ago

1.2.151

6 years ago

1.2.150

6 years ago

1.2.146

6 years ago

1.2.145

6 years ago

1.2.144

6 years ago

1.2.143

6 years ago

1.2.142

6 years ago

1.2.141

6 years ago

1.2.140

6 years ago

1.2.139

6 years ago

1.2.138

6 years ago

1.2.137

6 years ago

1.2.136

6 years ago

1.2.135

6 years ago

1.2.134

6 years ago

1.2.133

6 years ago

1.2.132

6 years ago

1.2.131

6 years ago

1.2.130

6 years ago

1.2.124

6 years ago

1.2.123

6 years ago

1.2.122

6 years ago

1.2.121

6 years ago

1.2.120

6 years ago

1.2.119

6 years ago

1.2.118

6 years ago

1.2.117

6 years ago

1.2.116

6 years ago

1.2.115

6 years ago

1.2.114

6 years ago

1.2.113

6 years ago

1.2.112

6 years ago

1.2.111

6 years ago

1.2.110

6 years ago

1.2.109

6 years ago

1.2.108

6 years ago

1.2.107

6 years ago

1.2.106

6 years ago

1.2.105

6 years ago

1.2.104

6 years ago

1.2.103

6 years ago

1.2.102

6 years ago

1.2.101

6 years ago

1.2.100

6 years ago

1.2.0

6 years ago

1.1.222

6 years ago

1.1.221

6 years ago

1.1.220

6 years ago

1.1.219

6 years ago

1.1.218

6 years ago

1.1.217

6 years ago

1.1.216

6 years ago

1.1.215

6 years ago

1.1.214

6 years ago

1.1.213

6 years ago

1.1.212

6 years ago

1.1.211

6 years ago

1.1.210

6 years ago

1.1.209

6 years ago

1.1.208

6 years ago

1.1.207

6 years ago

1.1.206

6 years ago

1.1.205

6 years ago

1.1.204

6 years ago

1.1.203

6 years ago

1.1.202

6 years ago

1.1.201

6 years ago

1.1.200

6 years ago

1.1.19

6 years ago

1.1.18

6 years ago

1.1.17

6 years ago

1.1.16

6 years ago

1.1.15

6 years ago

1.1.14

6 years ago

1.1.13

6 years ago

1.1.12

6 years ago

1.1.11

6 years ago

1.1.10

6 years ago

1.1.9

6 years ago

1.1.8

6 years ago

1.1.7

6 years ago

1.1.6

6 years ago

1.1.5

6 years ago

1.1.4

6 years ago

1.1.3

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago