7.0.4 • Published 7 years ago

rill v7.0.4

Weekly downloads
1,287
License
MIT
Repository
github
Last release
7 years ago

Expressive router for nodejs and the browser. Rill brings cascading middleware to the browser and enables a familiar routing solution for web applications.

Rill provides the minimum for abstractions over nodejs and the browser enabling things like routing (with redirecting, refreshes and more), cookies, and middleware with the same api.

It supports many view engines including Marko, React, Svelte and even html only template engines such as Pug.

Installation

npm install rill

Browser support

All modern browsers are supported including IE10 and above. Older browsers will need to polyfill the Promise API, checkout es6-promise for a good polyfill, babel-polyfill also covers this.

Community

Articles

Why Rill?

Rill is the answer to a simple question; Can I run my Express style router in the browser? Turns out you can and it works awesome.

It brings a common interface to many typical app like features in both the browser and nodejs. Many isomorphic frameworks and routers have crazy abstractions and learning curves but with Rill, if you understand Express or Koa, you already know how the routing works! In Rill you get to program much of your application logic using the same api (client or server) including routing, rendering, data fetching and more are easily shared.

Rill also works perfectly as a stand alone router for nodejs or in the browser. This allows for easy progressive enhancement. If all is well the browser can handle much of your application logic and if JavaScript fails for any reason your server knows exactly what to do.

How does this thing work?

If you look at the source for Rill here you will quickly notice there is ZERO browser specific code. This is all thanks to @rill/http which is node's HTTP.createServer ported to the browser.

In the browser it works by listening for internal link clicks, form submissions and browser history changes. It will then create a Rill Context for each of these events and emit it through the router, similar to how receiving a request works in nodejs.

It supports everything you'd expect from a client side nodejs server. This includes redirects, refreshes, cookies, scrolling and url updates using the History API.

Example

Create an app

/**
 * The following code can run 100% in the browser or in nodejs.
 * Examples use es2015/2016 with Babel and JSX but this is optional.
 */

import Rill from 'rill'
const app = new Rill() // You can call Rill without new, but autocomplete will not work.

Setup middleware

// Universal form data parsing middleware.
import bodyParser from '@rill/body'
app.use(bodyParser())

// Universal react rendering middleware.
import reactRenderer from '@rill/react'
app.use(reactRenderer())

// Example Logger
app.use(async ({ req }, next)=> {
  const start = Date.now()

  // Rill uses promises for control flow.
  // ES2016 async functions work great as well!
  await next()

  const ms = Date.now() - start
  console.log(`${req.method} ${req.url} - ${ms}`)
})

Setup a page

// Respond to a GET request.
app.get('/todos', async ({ res })=> {
  // Fetch a todolist from some service.
  const todolist = await MyTodoListService.getAllTodos()

  // Directly set React virtual dom to the body thanks to @rill/react.
  // (Checkout @rill/html for universal html diffing).
  res.body = (
    <html>
      <head>
        <title>My App</title>
        <meta name="description" content="Rill Application">
      </head>
      <body>
        <form action="/add-todo" method="POST">
          <h1>Just a plain old form</h1>
          <input type="text" name="todo"/>
          <button type="submit">Add Todo</button>
        </form>

        {todolist.length
          ? todolist.map(renderTodo)
          : 'No todos to display.'
        }
        <script src="/app.js"/>
      </body>
    </html>
  )
})

Handle a form submission

// Respond to a POST request.
app.post('/add-todo', async ({ req, res })=> {
  // We handle form submissions with Rill the same way one would express or koa.
  // Here we are simply adding the todo via some service.
  await MyTodoListService.addTodo({ text: req.body.todo })
  // And then we redirect back (same as res.redirect('/todos'))
  res.redirect('back')
})

Start app

// Start a regular http server.
// In the browser any form submissions or link clicks will intercepted by @rill/http.
app.listen({ port: 80 })

See Also

  • isbrowser - A browserify transform to remove server-side code.
  • isomorphic-fetch - Universal http requests using WHATWG fetch.
  • isomorphic-form-data - Send multipart form data universally (able to send files and works with fetch).
  • scroll-behavior - @rill/http will automatically try to use the "smooth" scroll-behavior when scrolling to targets on link clicks. This will polyfill that across modern browsers.
  • submit-form - Manually trigger Rill navigation in the browser.

Prior Art

  • koa-client - Koa clone that runs in the browser, inspired this package.
  • monorouter - Another isomorphic router that partially inspired this package.

Contributions

  • Use npm test to build and run tests.

License

MIT

7.0.4

7 years ago

7.0.3

7 years ago

7.0.2

8 years ago

7.0.1

8 years ago

7.0.0

8 years ago

7.0.0-rc.12

8 years ago

7.0.0-rc.11

8 years ago

7.0.0-rc.10

8 years ago

7.0.0-rc.9

8 years ago

7.0.0-rc.8

8 years ago

7.0.0-rc.7

8 years ago

7.0.0-rc.6

8 years ago

7.0.0-rc.5

8 years ago

7.0.0-rc.4

8 years ago

7.0.0-rc.3

8 years ago

7.0.0-rc.2

8 years ago

7.0.0-rc.1

8 years ago

6.0.2

8 years ago

6.0.1

8 years ago

6.0.0

8 years ago

5.0.15

8 years ago

5.0.14

8 years ago

5.0.13

8 years ago

5.0.12

8 years ago

5.0.11

8 years ago

5.0.10

8 years ago

5.0.9

8 years ago

5.0.8

8 years ago

5.0.7

8 years ago

5.0.6

8 years ago

5.0.5

8 years ago

5.0.4

8 years ago

5.0.3

8 years ago

5.0.2

8 years ago

5.0.1

8 years ago

5.0.0

8 years ago

4.3.5

8 years ago

4.3.4

8 years ago

4.3.3

8 years ago

4.3.2

8 years ago

4.3.1

8 years ago

4.3.0

8 years ago

4.2.1

8 years ago

4.2.0

8 years ago

4.1.5

8 years ago

4.1.4

8 years ago

4.1.3

8 years ago

4.1.2

8 years ago

4.1.1

8 years ago

4.1.0

8 years ago

4.0.1

8 years ago

4.0.0

8 years ago

3.0.2

8 years ago

3.0.1

8 years ago

2.5.1

9 years ago

2.5.0

9 years ago

2.4.0

9 years ago

2.3.2

9 years ago

2.3.1

9 years ago

2.3.0

9 years ago

2.1.9

9 years ago

2.1.8

9 years ago

2.1.7

9 years ago

2.1.6

9 years ago

2.1.5

9 years ago

2.1.4

9 years ago

2.1.3

9 years ago

2.1.2

9 years ago

2.1.1

9 years ago

2.1.0

9 years ago

2.0.1

9 years ago

2.0.0

9 years ago

1.1.2

9 years ago

1.1.1

9 years ago

1.1.0

9 years ago

1.0.1

9 years ago

1.0.0

9 years ago

0.8.10

9 years ago

0.8.8

9 years ago

0.8.7

9 years ago

0.8.6

9 years ago

0.8.5

9 years ago

0.8.4

9 years ago

0.8.3

9 years ago

0.8.1

9 years ago

0.8.0

9 years ago

0.7.0

9 years ago

0.6.8

9 years ago

0.6.7

9 years ago

0.6.6

9 years ago

0.6.5

9 years ago

0.6.4

9 years ago

0.6.3

9 years ago

0.6.2

9 years ago

0.6.1

9 years ago

0.6.0

9 years ago

0.5.16

9 years ago

0.5.15

9 years ago

0.5.14

9 years ago

0.5.13

9 years ago

0.5.12

9 years ago

0.5.11

9 years ago

0.5.10

9 years ago

0.5.9

9 years ago

0.5.8

9 years ago

0.5.7

9 years ago

0.5.6

9 years ago

0.5.5

9 years ago

0.5.4

9 years ago

0.5.3

9 years ago

0.5.2

9 years ago

0.5.1

9 years ago

0.5.0

9 years ago

0.4.28

9 years ago

0.4.27

9 years ago

0.4.25

9 years ago

0.4.24

9 years ago

0.4.23

9 years ago

0.4.22

9 years ago

0.4.21

9 years ago

0.4.20

9 years ago

0.4.19

9 years ago

0.4.18

9 years ago

0.4.17

9 years ago

0.4.16

9 years ago

0.4.15

9 years ago

0.4.14

9 years ago

0.4.13

9 years ago

0.4.12

9 years ago

0.4.11

9 years ago

0.4.1

9 years ago

0.4.0

9 years ago

0.3.3

9 years ago

0.3.2

9 years ago

0.3.1

9 years ago

0.3.0

9 years ago

0.2.13

10 years ago

0.2.12

10 years ago

0.2.11

10 years ago

0.0.901

10 years ago

0.2.10

10 years ago

0.0.900

10 years ago

0.2.9

10 years ago

0.2.8

10 years ago

0.2.7

10 years ago

0.2.6

10 years ago

0.2.5

10 years ago

0.2.4

10 years ago

0.2.3

10 years ago

0.2.2

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.94

10 years ago

0.1.93

10 years ago

0.1.92

10 years ago

0.1.91

10 years ago

0.1.90

10 years ago

0.1.89

10 years ago

0.1.88

10 years ago

0.1.87

10 years ago

0.1.86

10 years ago

0.1.85

10 years ago

0.1.84

10 years ago

0.1.83

10 years ago

0.1.82

10 years ago

0.1.81

10 years ago

0.1.8

10 years ago

0.1.7

10 years ago

0.1.6

10 years ago

0.1.5

10 years ago

0.1.4

10 years ago

0.1.3

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago

0.0.818

10 years ago

0.0.817

10 years ago

0.0.816

10 years ago

0.0.815

10 years ago

0.0.814

10 years ago

0.0.813

10 years ago

0.0.812

10 years ago

0.0.811

10 years ago

0.0.810

10 years ago

0.0.809

10 years ago

0.0.808

10 years ago

0.0.807

10 years ago

0.0.806

10 years ago

0.0.805

10 years ago

0.0.803

10 years ago

0.0.802

10 years ago

0.0.801

10 years ago

0.0.800

10 years ago

0.0.710

10 years ago

0.0.709

10 years ago

0.0.708

10 years ago

0.0.707

10 years ago

0.0.706

10 years ago

0.0.705

10 years ago

0.0.704

10 years ago

0.0.703

10 years ago

0.0.702

10 years ago

0.0.701

10 years ago

0.0.700

10 years ago

0.0.674

10 years ago

0.0.672

10 years ago

0.0.671

10 years ago

0.0.670

10 years ago

0.0.669

10 years ago

0.0.667

10 years ago

0.0.665

10 years ago

0.0.664

10 years ago

0.0.663

10 years ago

0.0.662

10 years ago

0.0.661

10 years ago

0.0.659

10 years ago

0.0.658

10 years ago

0.0.657

10 years ago

0.0.656

10 years ago

0.0.654

10 years ago

0.0.653

10 years ago

0.0.652

10 years ago

0.0.651

10 years ago

0.0.650

10 years ago

0.0.649

10 years ago

0.0.648

10 years ago

0.0.647

10 years ago

0.0.646

10 years ago

0.0.645

10 years ago

0.0.644

10 years ago

0.0.643

10 years ago

0.0.642

10 years ago

0.0.641

10 years ago

0.0.640

10 years ago

0.0.639

10 years ago

0.0.638

10 years ago

0.0.637

10 years ago

0.0.636

10 years ago

0.0.635

10 years ago

0.0.634

10 years ago

0.0.633

10 years ago

0.0.632

10 years ago

0.0.631

10 years ago

0.0.630

10 years ago

0.0.629

10 years ago

0.0.628

10 years ago

0.0.627

10 years ago

0.0.626

10 years ago

0.0.625

10 years ago

0.0.624

10 years ago

0.0.623

10 years ago

0.0.622

10 years ago

0.0.621

10 years ago

0.0.620

10 years ago

0.0.619

10 years ago

0.0.618

10 years ago

0.0.617

10 years ago

0.0.616

10 years ago

0.0.615

10 years ago

0.0.614

10 years ago

0.0.613

10 years ago

0.0.612

10 years ago

0.0.611

10 years ago

0.0.610

10 years ago

0.0.609

10 years ago

0.0.608

10 years ago

0.0.607

10 years ago

0.0.605

10 years ago

0.0.604

10 years ago

0.0.603

10 years ago

0.0.602

10 years ago

0.0.601

10 years ago

0.0.600

10 years ago

0.0.599

10 years ago

0.0.598

10 years ago

0.0.597

10 years ago

0.0.596

10 years ago

0.0.595

10 years ago

0.0.594

10 years ago

0.0.593

10 years ago

0.0.592

10 years ago

0.0.591

10 years ago

0.0.590

10 years ago

0.0.589

10 years ago

0.0.588

10 years ago

0.0.587

10 years ago

0.0.586

10 years ago

0.0.585

10 years ago

0.0.584

10 years ago

0.0.582

10 years ago

0.0.581

10 years ago

0.0.580

10 years ago

0.0.579

10 years ago

0.0.578

10 years ago

0.0.577

10 years ago

0.0.576

10 years ago

0.0.575

10 years ago

0.0.574

10 years ago

0.0.573

10 years ago

0.0.572

10 years ago

0.0.571

10 years ago

0.0.570

10 years ago

0.0.569

10 years ago

0.0.568

10 years ago

0.0.567

10 years ago

0.0.566

10 years ago

0.0.565

10 years ago

0.0.564

10 years ago

0.0.562

10 years ago

0.0.561

10 years ago

0.0.560

10 years ago

0.0.559

10 years ago

0.0.558

10 years ago

0.0.557

10 years ago

0.0.556

10 years ago

0.0.555

10 years ago

0.0.554

10 years ago

0.0.553

10 years ago

0.0.552

10 years ago

0.0.550

10 years ago

0.0.549

10 years ago

0.0.548

10 years ago

0.0.547

10 years ago

0.0.546

10 years ago

0.0.545

10 years ago

0.0.544

10 years ago

0.0.543

10 years ago

0.0.542

10 years ago

0.0.541

10 years ago

0.0.540

10 years ago

0.0.539

10 years ago

0.0.538

10 years ago

0.0.537

10 years ago

0.0.536

10 years ago

0.0.535

10 years ago

0.0.534

10 years ago

0.0.533

10 years ago

0.0.532

10 years ago

0.0.531

10 years ago

0.0.530

10 years ago

0.0.529

10 years ago

0.0.528

10 years ago

0.0.527

10 years ago

0.0.526

10 years ago

0.0.525

10 years ago

0.0.524

10 years ago

0.0.523

10 years ago

0.0.522

10 years ago

0.0.521

10 years ago

0.0.520

10 years ago

0.0.519

10 years ago

0.0.518

10 years ago

0.0.517

10 years ago

0.0.516

10 years ago

0.0.515

10 years ago

0.0.513

10 years ago

0.0.512

10 years ago

0.0.511

10 years ago

0.0.509

10 years ago

0.0.507

10 years ago

0.0.506

10 years ago

0.0.505

10 years ago

0.0.504

10 years ago

0.0.503

10 years ago

0.0.502

10 years ago

0.0.501

10 years ago

0.0.5

10 years ago

0.0.4999

10 years ago

0.0.499

10 years ago

0.0.498

10 years ago

0.0.497

10 years ago

0.0.495

10 years ago

0.0.494

10 years ago

0.0.493

10 years ago

0.0.492

10 years ago

0.0.491

10 years ago

0.0.490

10 years ago

0.0.49

10 years ago

0.0.489

10 years ago

0.0.488

10 years ago

0.0.487

10 years ago

0.0.486

10 years ago

0.0.485

10 years ago

0.0.484

10 years ago

0.0.483

10 years ago

0.0.482

10 years ago

0.0.481

10 years ago

0.0.48

10 years ago

0.0.479

10 years ago

0.0.478

10 years ago

0.0.477

10 years ago

0.0.476

10 years ago

0.0.475

10 years ago

0.0.474

10 years ago

0.0.473

10 years ago

0.0.472

10 years ago

0.0.471

10 years ago

0.0.47

10 years ago

0.0.467

10 years ago

0.0.46

10 years ago

0.0.459

10 years ago

0.0.458

10 years ago

0.0.457

10 years ago

0.0.456

10 years ago

0.0.455

10 years ago

0.0.454

10 years ago

0.0.453

10 years ago

0.0.452

10 years ago

0.0.451

10 years ago

0.0.45

10 years ago

0.0.441

10 years ago

0.0.44

10 years ago

0.0.432

10 years ago

0.0.431

10 years ago

0.0.43

10 years ago

0.0.42

10 years ago

0.0.4111

10 years ago

0.0.411

10 years ago

0.0.41

10 years ago

0.0.4

10 years ago

0.0.39

10 years ago

0.0.38

10 years ago

0.0.37

10 years ago

0.0.36

10 years ago

0.0.35

10 years ago

0.0.34

10 years ago

0.0.32

10 years ago

0.0.31

10 years ago

0.0.3

10 years ago

0.0.29

10 years ago

0.0.28

10 years ago

0.0.27

10 years ago

0.0.26

10 years ago

0.0.25

10 years ago

0.0.24

10 years ago

0.0.23

10 years ago

0.0.22

10 years ago

0.0.21

10 years ago

0.0.2

10 years ago

0.0.193

10 years ago

0.0.192

10 years ago

0.0.191

10 years ago

0.0.19

10 years ago

0.0.18

10 years ago

0.0.17

10 years ago

0.0.16

10 years ago

0.0.15

10 years ago

0.0.14

10 years ago

0.0.13

10 years ago

0.0.128

10 years ago

0.0.127

10 years ago

0.0.126

10 years ago

0.0.125

10 years ago

0.0.124

10 years ago

0.0.123

10 years ago

0.0.122

10 years ago

0.0.12

10 years ago

0.0.11

10 years ago

0.0.1

10 years ago

0.0.0

10 years ago