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

hapi-forest

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hapi-forest

A hapi plugin to generate routes based on mongoose models

  • 0.9.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
7
increased by40%
Maintainers
1
Weekly downloads
 
Created
Source

hapi-forest

package on npm Travis branch node 8+ required GitHub license

A FOREST

Provides REST handlers for mongoose models. Can also generate ready to use routes, for fast bootstrapping.

Quickstart

  1. Install it
npm i --save hapi-forest # or yarn add hapi-forest if you prefer
  1. Register the plugin.
// register hapi-forest
server.register({
  register: require('hapi-forest'),
  options: {
    // add your models here for auto route generation
    bootstrap: [ require('./models/user-model') ]
  }
});
  1. Test your dynamically generated REST endpoints. hapi-swagger works nicely with hapi-forest.

Take a look at the example directory for a full example.

Plugin options

  • bootstrap: [ MongooseModel, MongooseModel, … ]

    Will generate ready to use CRUD routes. hapi-forest will attempt to generate a basic joi schema based on the model.

Handlers

You can use the forest handler and define your own routes, instead of auto-generating them. This is useful if you need more control over your endpoints or want custom validation.

The forest handler behaves differently based on your route definition. GET, POST, PATCH & PUT are supported.

URL parameter

For routes like GET /collection/{name}, the first URL parameter (name in this case) is used as the "id". It will be used in the condition of the mongoose query.

{id} will translate to _id for convenience.

Generic Options for all methods
OptionDescription
modelrequired – The mongoose Model for this route.
typeOverwrites the auto selected handler. Can be one of getOne, getAll, post, put, delete
preQueryA Function that gets passed the current mongoose query, that was generated by forest.
transformResponseA Function that gets passed the response. You have to return the modified response.

getOne

Returns all documents from the specified model.

  • Only custom fields can be selected using select.
  • the first parameter in the path (name in this example) will be used to query
server.route({
  method: 'GET',
  path: '/users/{name}',
  handler: {
    forest: {
      model: User,
    }
  }
});


getAll

Returns all documents from the specified model. The result will be streamed.

  • Only custom fields can be selected using select.
  • The filterByQuery option allows basic filtering of the results by sending a query with the request. (?group=nodejs&role=developer)
    • the query that results from the user input can be modified with the transformQuery option. You can specify a function that has to return the updated query.
  • The allowLimit option gives the client the ability to limit the number of results by adding $limit=x to the query parameters.
server.route({
  method: 'GET',
  path: '/users',
  handler: {
    forest: {
      model: User,
      select: 'firstName group lastName birthday',
    }
  }
});

post

Creates a new document.

  • skipMongooseHooks will use a faster mongoose create implementation, skipping all hooks.
server.route({
  method: 'POST',
  path: '/users',
  handler: {
    forest: {
      model: User
    }
  }
});

put

Updates an existing document or creates a new document if it does not exist. For now an update will not overwrite and existing document but only update it, like patch does.

  • you can disallow creating new documents with allowUpsert: false. PUT will behave like PATCH in that case.
server.route({
  method: 'PUT',
  path: '/users/{name}',
  handler: {
    forest: {
      model: User,
      allowUpsert: true,
    }
  }
});

delete

Deletes a document.

  • the first parameter in the path (name in this example) will be used to query
server.route({
  method: 'DELETE',
  path: '/users/{name}',
  handler: {
    forest: {
      model: User,
    }
  }
});

Keywords

FAQs

Package last updated on 25 Jan 2024

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