0.2.4 • Published 8 years ago
http-request-middleware v0.2.4
http-request-middleware
NodeJS http request handling middleware with admin UI.
Is your back-end api not ready, too slow, or unstable? You don't have to wait for that by mocking all back-end responses using http-request-middleware.
Compatible with connect, express, browser-sync and many more.

TL;DR
Add the middleware to your code before you start the server.
var express = require('express');
var httpRequestMiddleware = require('http-request-middleware');
var app = express();
app.use(httpRequestMidleware.middlewares);
app.listen(3000);Install
$ npm install --save-dev http-request-middlewareGetting Started
1. Create mock responses and list to custom-urls.json
{
"/api/hello": "hello.json",
"/api/world": "world.json",
"/api/foo": {
"responses": [
{"name": "case 1", "url": "api-responses/foo.json", "active": true},
{"name": "case 2", "url": "api-responses/foo2.json"},
{"name": "case 3", "url": "api-responses/foo3.json"}
]
},
"/api/bar": {
"responses": [
{"name": "case 1", "url": "api-responses/bar.json", "active": true},
{"name": "case 2", "url": "api-responses/bar2.json"},
{"name": "case 3", "url": "api-responses/bar3.json"}
]
}
}2. Optionally, create proxy-urls.json to use proxy features.
[
{
"active":true,
"context": [
"api/foo"
],
"options": {
"logLevel": "debug",
"target": "https://www.yourServer.com",
"secure": false,
"autoRewrite": true,
"changeOrigin": true
}
}
]proxy-url options can be found here
3. Update package.json with the configuration files
{
"name": "my package",
"version": "0.1.0",
...
httpRequestMiddleware: {
"basePath": "./dist",
"customUrls": "./custom-urls.json",
"proxyUrls": "./proxy-urls.json"
}
}4. Start your development server with http-request-middleware
browser-sync example
var browserSync = require('browser-sync');
var httpRequestMiddleware = require('http-request-middleware');
browserSync.init({
logLevel: 'debug',
host: 'localhost.rogers.com', // e.g. localhost.mysite.com
port: 3000,
startPath: '/',
ui: { port: 3001 },
open: 'external',
browser: 'default',
server: {
baseDir: __dirname,
middleware: httpRequestMiddleware.middlewares
},
https: true
});connect example
express example
webpack example
5. Visit admin UI /developer.html to manage custom urls and/or proxy urls.
https://localhost:3000/developer.htmlConfiguration
| Option | Description |
|---|---|
| basePath | the base path that .json files are located. e.g. 'builds/dist' |
| customUrls | the file path of custom urls configuration file .g. './custom-urls.json' |
| proxyUrls | Optional, the file path of proxy urls configuration file .g. './proxy-urls.json' |
| headUrls | Optional, the list of HTML header files |
| navigationLinks | list of html links to be seen on the side bar of admin UI. |
package.json Example
{
"name": "eclipse",
"version": "0.2.7",
...
"httpRequestMiddleware": {
"basePath": "builds/dist",
"customUrls": "gulp-tasks/browser-sync/custom-urls.json",
"proxyUrls": "gulp-tasks/browser-sync/proxy-urls.json",
"headUrls": [
"https://fonts.googleapis.com/icon?family=Material+Icons",
"https://unpkg.com/font-awesome@4.7.0/css/font-awesome.css",
"https://unpkg.com/mce/dist/themes/blue.css",
"https://unpkg.com/mce/dist/mce.min.css",
"https://unpkg.com/mce/dist/mce.min.js"
],
"navigationlinks": [
"<mce-nav-item href='https://example.com/my-document' icon='fa-book'>Documents</mce-nav-item>",
"<mce-nav-item href='/web/consumer/developer' icon='link'>Links</mce-nav-item>"
]
}
}Custom File Configuration Example
'use strict';
var httpRequestMiddleware = require('http-request-middleware');
httpRequestMiddleware.config.basePath = './api-responses'; // where .json(s) exists
httpRequestMiddleware.config.customUrls = require('./custom-urls.json');
httpRequestMiddleware.config.proxyUrls = require('./proxy-urls.json');Advanced custom-url.json Configuration
custom-url can take a condition in which, if it evaluates to true, the mock is used, else the next active condition is used.
condition options
req
middleware req parameter, has properties such as req.method
params
concatenated object with both query parameters and request payload
Example
{
"/api/conditional": {
"responses": [
{"name": "case 1", "url": "api-responses/foo.json", "condition": "req.method === 'POST'", "statusCode": 201, "active": true},
{"name": "case 2", "url": "api-responses/foo.json", "condition": "req.method === 'POST'"},
{"name": "case 3", "url": "api-responses/foo2.json", "condition": "params.a === 'foo'", "statusCode": 500, "active": true},
{"name": "case 4", "url": "api-responses/foo2.json", "condition": "params.a === 'foo'"},
{"name": "case 5", "url": "api-responses/foo3.json", "active": true}
]
}
}Compatible servers
http-request-middleware is compatible with the following servers:
- connect
- express
- browser-sync
- lite-server
- grunt-contrib-connect
- grunt-browser-sync
- gulp-connect
- gulp-webserver
- webpack-dev-server
License
The MIT License (MIT)
Copyright (c) 2018 Allen Kim