Skip to content

uxter/rest-req-res

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

REST Request Response

REST API helper, json and xml format, cors, methods override

npm package

Installing

Installing of NPM package

npm install rest-req-res

How to use

Beginning

var express = require('express');
var app = express();
var router = express.Router();
var config = require('./config.json');
var rest = require('rest-req-res');
config.errors = require('./errors.json');
app.set('config', config);
rest(app);

Success response

router.get('/success', function(req, res){
  res.success({
    resultField1: 'value1',
    resultField2: 'value2'
  }, 200, {
    metaField1: 'value1',
    metaField2: 'value2'
  });
});

Error response

router.get('/error', function(req, res) {
  res.error('CONFLICT', {
    details1: 'value1',
    details2: 'value2'
  });
});

Mounting

app.use('/'+config.api.version, router);
app.listen(config.app.port, config.app.host);

Config example ./config.json

{
  "app": {
    "port": 8080,
    "host": "127.0.0.1"
  },
  "api": {
    "version": "v1",
    "origin": ["Test", null]
  },
  "cors": {
    "maxAge": 86400,
    "allowHeaders": [
      "Content-Type", "Accept", "Origin", "X-HTTP-Method-Override", "User-Agent", "Authorization",
      "Cache-Control", "Keep-Alive", "X-Requested-With", "If-Modified-Since"
    ],
    "allowMethods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"]
  }
}

Errors example ./errors.json

{
  "BAD_REQUEST": {"code": 400, "status": 400, "message": "Bad Request"},
  "UNAUTHORIZED": {"code": 401, "status": 401, "message": "Unauthorized"},
  "FORBIDDEN": {"code": 403, "status": 403, "message": "Forbidden"},
  "NOT_FOUND": {"code": 404, "status": 404, "message": "Not Found"},
  "METHOD_NOT_ALLOWED": {"code": 405, "status": 405, "message": "Method Not Allowed"},
  "REQUEST_TIMEOUT": {"code": 408, "status": 408, "message": "Request Timeout"},
  "CONFLICT": {"code": 409, "status": 409, "message": "Conflict"},
  "INTERNAL_SERVER_ERROR": {"code": 500, "status": 500, "message": "Internal Server Error"},
  "SERVICE_UNAVAILABLE": {"code": 503, "status": 503, "message": "Service Unavailable"},
  "UNKNOWN_ERROR": {"code": 520, "status": 520, "message": "Unknown Error"}
}

Method Override

Request headers

X-HTTP-Method: PUT
X-HTTP-Method-Override: PUT
X-Method-Override: PUT

URL query parameter

?httpMethod=put

If POST http://url?httpMethod=put then handle as PUT http://url

Request Content-Type header

Supported Content-Type

Content-Type: application/xml
Content-Type: application/json

If Content-Type: application/xml and body

<?xml version="1.0" encoding="UTF-8"?><test>1</test>

then server will parse request body as

{
  "test": "1"
}

Request Accept header

Supported Accept

Accept: application/xml
Accept: application/json

URL query parameter

?responseFormat=xml
?responseFormat=json

Response status code

URL query parameter

?forcedResponseStatus=200

Development

Run tests

npm run test

Run watch files and autostart test

npm run watch

License

ISC

About

REST API helper, json and xml format, cors, methods override

Resources

License

Stars

Watchers

Forks

Packages

No packages published