@rill/active

0.7.0 • Public • Published

Rill
@rill/active
API stability Standard NPM version Downloads Gitter Chat

Continuation local storage for Rill. Keeps track of the current request context and makes it available in all of your functions (even async ones!).

Uses Zone.js internally.

Installation

npm install @rill/active

Example

app.js

const app = rill()
const active = require("@rill/active")
const loadUser = require('./load-user.js')

// Setup the middleware.
app.use(active())

// Example route.
app.get("/my-profile", async ({ req, res, locals }, next)=> {
	// Call your regular functions (this one async loads a user object).
	await loadUser()

	res.body = renderPage({
		user: locals.user
	})
})

load-user.js

const active = require("@rill/active")
const Users = require('./db/user')

/**
 * This is just an example that requires some details from the current request.
 * @rill/active saves you having to manually pass the request context everywhere.
 */
module.exports = async function () {
	// As an example lets pretend we need the request hostname.
	const hostname = active.get('req.hostname')

	// Async load a user.
	const user = await Users.find({
		hostname: hostname,
		email: email
	})

	// And then we want to set locals on the request after we load the user.
	active.set('locals.user', user)
}

API

  • active() : Creates a middleware that keeps track of the active request.
app.use(active())
  • active.get(key: String, default: Any) : Pulls out a dot-notation key from the active request context.
active.get('req.href')
  • active.set(key: String, val: Any) : Sets a dot-notation key on the active request context.
active.set('locals.title', 'some title')
  • active.has(key: String) : Checks if a key exists on the active request context.
active.has('locals.title') // true

Contributions

  • Use npm test to run tests.

Please feel free to create a PR!

Package Sidebar

Install

npm i @rill/active

Weekly Downloads

11

Version

0.7.0

License

MIT

Last publish

Collaborators

  • dylanpiercey