node-rest-server-2
v3.3.4
Published
Configurable node rest server
Downloads
32
Maintainers
Readme
node-rest-server-2
Configuration only node rest server
Get your own rest based nodejs server within minutes by just providing endpoints and controller.
Features
- Ready to use rest server in minutes.
- Free from all boilerplate code for creating and managing the server, so that developer can focus on actual business logic.
- Simple configuration to generate response data.
- Supports all http methods along with async connections
Where you can use
Can be used as a stub server for any application(like ReactJS, AngularJS) to mock server response during development.
Can be used for creating rest micro-service in minutes (help me improve this library)
Do you use for anything else!
Installation
This is a Node.js module available through the npm registry. Install using below command.
npm install --save node-rest-server-2
Importing
import NodeRestServer from 'node-rest-server-2'; // ES6
// or
const NodeRestServer = require('node-rest-server-2'); // ES5
// or
import { NodeRestServer } from 'node-rest-server-2'; // If you like to use named export
// call it as function and pass configuration
NodeRestServer(routeConfig, serverConfig);
Usage Example
import NodeRestServer from 'node-rest-server-2';
const routeConfig = {
'/api1': {
method: 'GET',
status: 200,
controller: () => 'Data',
},
};
NodeRestServer(routeConfig);
Sample
example directory provides a sample application explaining the use of this library.
Route Configuration
A route configuration is an object with key(route path) value(route options) pair:-
- Path: Uri which will serve a resource in rest server
- Route Options: Options which define working of the path and also decide status and response payload.
Route Options
| Name | Type | Default | Description |
| :------------------ | :----------------- | :------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| method | String
| GET
| Method defines the type of request controller will handle |
| controller | function\|Object
| | This function/object will contain the business logic for the route path. For a function an object is passed which will contain request url
, body
, params
and header
and response of filter
to be used. |
| status (optional) | String
| 200
| An appropriate HTTP response status code which server will give response for a request |
Controller method
A controller can either return
- an object with
status
andpayload
;
{
status: 500, // should be a number
payload: "Hello world" // user can send any valid json converted using JSON.stringify()
}
or
a response data object (valid as per
JSON.stringify()
json spec)a
Promise
which then resolves to return data with above spec
Route config Example
const routeConfig = {
'/endpoint1': {
method: 'GET',
status: 200,
controller: () => 'Data',
},
'/endpoint2': {
method: 'POST',
controller: async (requestData, { getDatabaseConnection }) => {
const dataFromDB = await getDatabaseConnection();
return { status: 200, payload: { data: 'Data', dataFromDB } };
},
},
'/endpoint3': [
{
method: 'POST',
controller: async (requestData, { getDatabaseConnection }) => {
// requestData.method will be POST
const dataFromDB = await getDatabaseConnection();
return { status: 200, payload: { data: 'Data', dataFromDB } };
},
},
{
method: 'GET',
controller: async (requestData) => {
// requestData.method will be GET
return { status: 200, payload: { data: 'Async data' } };
},
}
],
'/async/endpoint': {
method: 'POST',
controller: async (requestData) => {
// Some DB/api calls
return { status: 200, payload: { data: 'Async data' } };
},
},
'/image': {
method: 'GET',
controller: async (requestData) => {
return { status: 200, filePath: 'path/to/image' };
}
}
};
Server Configuration (optional)
This manages how the server will be configured
| Name | Type | Default | Description |
| :-------------------- | :---------------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| basePath | String
| | Common prefix for all the routes |
| port | Number
| 8000
| Port on which server will serve the content |
| delay (sec) | Number
| 0
| Forcefully delay the response timing in seconds |
| logger | Object\|Boolean
| true
| Enable logging for application, a boolean value will enable/disable all logging features, an object can be passed with property enable
to toggle the logging and debug
to enable/disable debug logs |
| getDatabaseConnection | function
| | Provides a mechanism to get DB connection using globally available method passed (supports Promise
) to controller in second parameter. |
| filter | function
| | Enable application level filter and pass returned value(supports Promise
) to controller. |
| cors | Object
| undefined
| Config should be as per cors package |
Server config Example
const serverConfig = {
basePath: '/base/api',
port: 8080,
delay: 2,
logger: {
enable: true,
debug: false,
},
getDatabaseConnection: async () => {
return Promise.resolve('db connection');
}
filter: (requestData) => {
return { data: 'calculate' };
},
cors: {
origin: '*'
},
};