2.1.2 • Published 5 years ago
hapi-resource-router v2.1.2
hapi-resource-router adds a resourceful router to hapi-based application servers. Instead of defining and configuring routes on an individual basis, hapi-resource-router uses a hierarchy of resources under which the routes are defined to allow configuration to be shared and inherited in a more imperative way.
Lead Maintainer - Chris Serino
Install
npm install hapi-resource-routerAPI
The API is available in the API documentation.
Example
Server
const Hapi = require('hapi');
const HapiResourceRouter = require('hapi-resource-router');
const resources = require('./resources');
const server = new Hapi.Server();
const start = async () => {
  await server.register({
    plugin: HapiResourceRouter,
    options: {
      basePath: '/v1'
    }
  });
  server.resources().add(resources);
  await server.start();
};
start();Resources
const UserController = require('./user_controller');
module.exports = (routes) => {
  routes.collection('users', users => {
    users.controller = UserController;
    users.index(); // GET /v1/users
    users.create(); // POST /v1/users
    users.items('user', user => {
      user.show(); // GET /v1/users/{user}
      user.update(); // PUT /v1/users/{user}
      user.destroy(); // DELETE /v1/users/{user}
    });
  });
};Controller
const Joi = require('joi');
const users = [
  {
    username: 'chris'
  },
  {
    username: 'matt'
  }
];
class UserController {
  index(request, h) {
    return users;
  }
  show(request, h) {
    const username = request.params.user;
    const user = users.find((u) => u.username === username);
    if (!user) {
      return h.response('Not found').statusCode(404);
    }
    return user;
  }
  create(request, h) {
    const user = request.payload;
    return user;
  }
  update(request, h) {
    const username = request.params.user;
    const user = users.find((u) => u.username === username);
    if (!user) {
      return h.response('Not found').statusCode(404);
    }
    Object.assign(user, request.payload);
    return user;
  }
  destroy(request, h) {
    const username = request.params.user;
    const user = users.find((u) => u.username === username);
    if (!user) {
      return h.response('Not found').statusCode(404);
    }
    return h.response();
  }
}
UserController.validate = {
  payload: {
    create: Joi.object({
      username: Joi.string().email().required(),
      password: Joi.string().required()
    }),
    update: Joi.object({
      password: Joi.string().required()
    })
  }
};
module.exports = new UserController();1.3.4
5 years ago
2.1.2
5 years ago
2.1.1
5 years ago
2.1.0
5 years ago
2.0.1
6 years ago
2.0.0
6 years ago
1.3.3
6 years ago
1.3.2
6 years ago
1.3.1
6 years ago
1.3.0
6 years ago
1.2.4
7 years ago
1.2.3
7 years ago
1.2.2
7 years ago
1.2.1
7 years ago
1.2.0
7 years ago
1.1.0
7 years ago
1.0.3
7 years ago
1.0.2
7 years ago
1.0.1
7 years ago
1.0.0
7 years ago