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: '*'
},
};