@articulate/hapi-json-view

4.0.0 • Public • Published

Hapi JSON View Build Status

A view engine for the hapi framework.

Installation

npm install --save @nesive/hapi-json-view

Usage

server.js:

const Hapi = require('hapi');
const HapiJsonView = require('@nesive/hapi-json-view');
const Path = require('path');
const Vision = require('vision');

const server = new Hapi.Server();
server.connection({ port: 8080 });

server.register(Vision, (err) => {
  if (err) throw err;

  server.views({
    engines: {
      js: {
        module: HapiJsonView.create(),
        contentType: 'application/json',
      }
    },
    path: Path.join(__dirname, 'templates'),
  });

  server.route({
    method: 'GET',
    path: '/article',
    handler: function(request, reply) {
      const article = {
        _id: '507f1f77bcf86cd799439011',
        title: 'Node.js',
        author: {
          _id: '507f191e810c19729de860ea',
          name: 'John Doe',
        },
      };

      reply.view('article', { article: article });
    },
  });
});

templates/article.js:

json.set('title', article.title);
json.set('author', (json) => {
  json.set('name', article.author.name);
});

This template generates the following object:

{
  title: 'Node.js',
  author: {
    name: 'John Doe'
  }
}

Functions

set()

It assigns a value to a key.

json.set('title', 'Node.js');

// => { title: 'Node.js' }

The value can be a function. If json.set() is called with a key, it creates an object:

json.set('author', (json) => {
  json.set('name', 'John Doe');
});

// => { author: { name: 'John Doe' } }

If json.set() is called without a key, it assign the value to the parent key:

json.set('title', (json) => {
  json.set('Node.js');
});

// => { title: 'Node.js' }

array()

It creates a new array by iterating through an existing array:

const numbers = ['one', 'two'];

json.set('numbers', json.array(numbers, (json, number) => {
  json.set('number', number);
}));

// => { numbers: [{ number: 'one' }, { number: 'two' }] }

extract()

It extracts values from an object and assigns them to the result object:

const numbers = { one: 'one', two: 'two', three: 'three' };

json.extract(numbers, ['two', 'three']);

// => { two: 'two', three: 'three' }

helper()

Helpers can be registered through the engine configuration:

const Hapi = require('hapi');
const HapiJsonView = require('@nesive/hapi-json-view');
const Path = require('path');
const Vision = require('vision');

const server = new Hapi.Server();
server.connection({ port: 8080 });

server.register(Vision, (err) => {
  if (err) throw err;

  server.views({
    engines: {
      js: {
        module: HapiJsonView.create(),
        contentType: 'application/json',
      }
    },
    path: Path.join(__dirname, 'templates'),
    helpersPath: Path.join(__dirname, 'templates/helpers'),
  });
});

They can then be used by their name:

json.set('title', json.helper('uppercase', article.title));

partial()

Partials can be registered through the engine configuration:

const Hapi = require('hapi');
const HapiJsonView = require('@nesive/hapi-json-view');
const Path = require('path');
const Vision = require('vision');

const server = new Hapi.Server();
server.connection({ port: 8080 });

server.register(Vision, (err) => {
  if (err) throw err;

  server.views({
    engines: {
      js: {
        module: HapiJsonView.create(),
        contentType: 'application/json',
      }
    },
    path: Path.join(__dirname, 'templates'),
    partialsPath: Path.join(__dirname, 'templates/partials'),
  });
});

They can then be used by their name:

json.set('author', json.partial('author', { author: article.author }));

Keywords

Install

npm i @articulate/hapi-json-view

DownloadsWeekly Downloads

3

Version

4.0.0

License

MIT

Last publish

Collaborators

  • antfor7717
  • eashba-articulate
  • teisia
  • luiscurvelo-articulate
  • geeshin
  • connorspeers
  • kotting
  • akytsiuk
  • stevenhauser
  • 0xbitrabbit
  • ahodges-articulate
  • renolc
  • lucas.adriano
  • juniormince
  • dholmes_articulate
  • jase-articulate
  • anniekim
  • kfurness
  • amichailevy
  • jltimm
  • jbirkholz
  • auggie
  • tjsimons88
  • byrdsd
  • tgrossen-articulate
  • nikoden
  • sam-gale
  • glemmi
  • chad-articulate
  • patternleaf
  • kush-articulate
  • francyarticulate
  • tylerhaas
  • deckeraga
  • toristyner
  • lmallory
  • racheldonovan
  • jamesadams11
  • jasminabasurita
  • fromonesrc
  • spencerfdavis
  • pklingem
  • kdstew
  • tecnobrat
  • jrpz
  • flintinatux
  • obeliaiev
  • caprisone
  • jestefan-fsl
  • mcurran
  • spurr
  • botzo
  • mgreystone
  • tchamblee
  • rpearce
  • bschemmel
  • dietervds
  • vscerchia
  • tylerodonnell
  • esmitharticulate
  • matthewsecrist
  • jesspoemape
  • mwinckler-articulate
  • evil
  • cfriedel
  • dbackes
  • milogert
  • mikeswart
  • melhotiby
  • borbulon
  • efoberg
  • matty-articulate
  • slodaniel
  • tracytran
  • henryng24
  • iamwill
  • jalissa
  • gpalmer00
  • prosper.dev
  • nicholasodonnell
  • dpowell
  • faylee
  • matt.loberg
  • bobshields
  • jiantjon
  • bmazarelli
  • sbaumjr