JSPM

  • Created
  • Published
  • Downloads 37
  • Score
    100M100P100Q63705F
  • License MIT

RESTful API Nodejs designed for horizontal scalability, based on Swagger, Redis, JWT, Passport, Socket.io, Express, MongoDB. Support multiple cluster!

Package Exports

  • nodetomic-api-swagger

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (nodetomic-api-swagger) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Nodetomic Api Swagger

Codacy Badge NPM version Build Status dependencies Status devDependencies Status Gitter chat GitHub license Downloads

RESTful API Nodejs designed for horizontal scalability, based on Swagger, Redis, JWT, Passport, Socket.io, Express, MongoDB. Support multiple cluster!

Horizontal scalability

Imgur

Preview

Swagger Api

http://localhost:8000/docs

Technologies

Requirements

Installation

git clone https://github.com/kevoj/nodetomic-api-swagger
cd nodetomic-api-swagger
npm i

Development

Start

npm start

Imgur

Optional: npm run modemon if you want work with nodemon.

Build

npm run build

Imgur

Generate folder dist. So "dist/client" is optional. You can paste the compilation of a client here, for example of Vue, React, Angular ...

Imgur

Test

npm test

Imgur

Lint

npm run lint

Pm2 [Development]

Simple

Run pm2 in a single thread and run pm2 console

npm run dev-simple

Imgur

Cluster

Run pm2 in multiple threads and run pm2 console

npm run dev-cluster

Imgur

Pm2 [Production]

Simple

Run pm2 in a single thread

npm run simple

Imgur

Cluster

Run pm2 in multiple threads

npm run cluster

Imgur

Stop

PM2

destroy pm2 simple and pm2 cluster

npm stop

Node

destroyed all process for node

killall node

How to create..

Model

src/api/models/hello.js

import mongoose from 'mongoose';
const Schema = mongoose.Schema;

const HelloSchema = new Schema({
  greet: {
    type: String,
    required: [true, 'Greet is required.']
  },
  language: {
    type: String,
    required: [true, 'Language is required.']
  }
});

export default mongoose.model('Hello', HelloSchema);

Controller

src/api/controllers/hello.js

import { result, notFound, error } from 'express-easy-helper';
import Hello from '../models/hello';

export function list(req, res) {
  return Hello.find().exec()
        .then(notFound(res))
        .then(result(res))
        .catch(error(res));
}

Swagger (Router)

src/api/swagger/hello.yaml


/api/hello:
  x-swagger-router-controller: hello 
  get:
    operationId: list
    tags:
      - Hello
    summary: Get list Hello's
    description: Returns all hello
    responses:
      200:
        description: Success
      404:
        description: Not found
      500:
        description: Error

Swagger (Router + middleware)

src/api/swagger/hello.yaml


/api/hello:
  x-swagger-router-controller: hello 
  get:
    operationId: list
    security:
      - Bearer: []
    x-security-scopes:
      - admin
    tags:
      - Hello
    summary: Get list Hello's
    description: Returns all hello
    responses:
      200:
        description: Success
      404:
        description: Not found
      500:
        description: Error

Socket

src/api/sockets/hello.js

export let socket = null;
export let io = null;

// Constructor
export default (_socket, _io) => {
    socket = _socket;
    io = _io;
    on();
}

// Here should be all events 'on'
export function on() {
  // Listen 'example'
    socket.on('example', function (data) {
  // Emit to cool
      emit('cool', data);
    });
}

// Emit events
export function emit(event, data) {
    io.emit(event, data);
}

Controller + Socket

src/api/controllers/hello.js

import { result } from 'express-easy-helper';
import { emit } from '../sockets/hello';

export function test(req, res) {

  emit('hello','world');
  return result(res, 'Socket emitted!');

}

License

MIT © Leonardo Rico