Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

koa-jade

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

koa-jade

A Jade middleware for Koa

  • 1.0.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
6
decreased by-70%
Maintainers
1
Weekly downloads
 
Created
Source

Koa-jade

Node version NPM version Dependency Status Travis CI

A Jade middleware for Koa.

How to use

npm install koa-jade --save
var koa = require('koa')
var jade = require('koa-jade')
var app = koa()

app.use(jade.middleware({
  viewPath: __dirname + '/views',
  debug: false,
  pretty: false,
  compileDebug: false,
  locals: global_locals_for_all_pages,
  basedir: 'path/for/jade/extends',
  helperPath: [
    'path/to/jade/helpers',
    { random: 'path/to/lib.js' },
    { _: require('lodash') }
  ]
}))

app.use(function* () {
  this.render('index', locals_for_this_page, true)
})

app.listen(3000)

Normal function vs. generator function:

iojs 1.6.4
Normal function x 163,231 ops/sec ±1.33% (180 runs sampled)
Generator function x 74,904 ops/sec ±1.86% (173 runs sampled)
Fastest is Normal function

Options

viewPath: where Jade templates be stored. Default is process.cwd().

pretty and compileDebug: see Jade's docs. Default is false.

debug: shorthand for pretty and compileDebug. Default is false.

locals: variables that will be passed to Jade templates.

noCache: use cache or not. Cache could make template rendering 100x faster than without cache. It useful for production, but useless for development (pages would not be updated untill Koa restarted). In most case, noCache: process.env === 'development' should be enough. If wanna control it in production for specific page, use render()'s noCache instead.

helperPath: String or Array, where to load helpers, and make them available on all .jade. In Array, you can use object to assgin name for module, eg: { random: './path/to/random.js' }.

basedir: help Jade to identify paths when using extends with absolute paths.

Methods

middleware(options)

Configure and create a middleware.

render(tpl, locals, options, noCache)

Render template, and set rendered template to this.body.

tpl: the path of template that based on viewPath, .jade is optional.

locals: locals for this page. Optional. If options or noCache presented, please use {}, undefined or null for empty locals.

options: override global default options for this page. Only assigning an object or a boolean to it will take effects.

noCache: use cache or not. Notes: 1. overrides global noCache; 2. won't affect other pages.

If options is set to true or false, it will be treated as noCache, and noCache will be ignored. For example, render(tpl, locals, true) equals to render(tpl, locals, {}, true), and render(tpl, locals, true, false) will skip cache and re-compile template.

options and noCache are optional.

basedir

If you encounter this error, Error: the "basedir" option is required to use "extends" with "absolute" paths, try to set basedir like this:

app.use(jade.middleware({
  viewPath: 'path/to/views',
  basedir: 'path/for/jade/extends'
}))

or

app.use(function* () {
  this.render('index', locals, { basedir: 'path/for/jade/extends' })
})

Content-Type

Koa-jade sets content-type to text/html automatically. if wanna change it, do like this:

this.render('index')
this.type = 'text/plain'

Global Helpers

By setting helperPath, koa-jade will load all the modules that under sepecified folxder, and make them available on all templates.

helperPath also could be an array including folders, files path, even moduleName: 'path/to/lib.js mapping object. Also support node module as a helper, just like: '_': require('lodash')

Defining Helper

// format-date.js
module.exports = function (input) {
    if (input instanceof Date) {
      return (input.getMonth() + 1) + '/' + input.getDate() + '/' + input.getFullYear()
    }

    return input
}

It equals to:

// whatever.js
module.exports = {
  moduleName: 'formatDate',
  moduleBody: function (input) {
    if (input instanceof Date) {
      return (input.getMonth() + 1) + '/' + input.getDate() + '/' + input.getFullYear()
    }

    return input
  }
}

In Jade:

p= formatDate(new Date())

How koa-jade resolves views

For example, there's a folder structure like this:

- views
  |--- foo.jade
  |--- foo/
    |--- index.jade
  |--- bar/
    |--- index.jade
  |--- baz

For this.render('foo'), koa-jade will render foo.jade, not foo/index.jade (file has higher priority than directory). If you wanna render foo/index.jade, you have to use explicit path: this.render('foo/index').

For this.render('bar'), because bar.jade doesn't exist and bar is a directory, koa-jade will search for bar/index.jade and try to render it.

For this.render('baz'), because baz is a file, and not end with .jade, koa-jade will throw an ENOENT error.

Todo

  • cache for generated HTML file
  • tests

Contributors

Via GitHub

Keywords

FAQs

Package last updated on 11 Apr 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc