http-proxy-middleware
Advanced tools
Comparing version
# Changelog | ||
## next | ||
- chore: drop node 6 (BREAKING CHANGE) | ||
- chore: update to micromatch@4 ([BREAKING CHANGE](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md#400---2019-03-20)) | ||
- chore: update dev dependencies | ||
- refactor: migrate to typescript ([#328](https://github.com/chimurai/http-proxy-middleware/pull/328)) | ||
- feat(middleware): Promise / async support ([#328](https://github.com/chimurai/http-proxy-middleware/pull/328/files#diff-7890bfeb41abb0fc0ef2670749c84077R50)) | ||
- refactor: remove legacy options `proxyHost` and `proxyTable` (BREAKING CHANGE) | ||
## [v0.19.1](https://github.com/chimurai/http-proxy-middleware/releases/tag/v0.19.1) | ||
@@ -4,0 +13,0 @@ |
{ | ||
"name": "http-proxy-middleware", | ||
"version": "0.19.1", | ||
"version": "0.20.0-beta.0", | ||
"description": "The one-liner node.js proxy middleware for connect, express and browser-sync", | ||
"main": "index.js", | ||
"main": "dist/index.js", | ||
"files": [ | ||
"index.js", | ||
"lib" | ||
"dist" | ||
], | ||
"scripts": { | ||
"clean": "rm -rf coverage", | ||
"lint": "prettier \"**/*.{js,md}\" --list-different", | ||
"lint:fix": "prettier \"**/*.{js,md}\" --write", | ||
"test": "npm run lint && mocha --recursive --colors --reporter spec", | ||
"cover": "npm run clean && istanbul cover ./node_modules/mocha/bin/_mocha -- --recursive", | ||
"coveralls": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- --recursive --reporter spec && istanbul-coveralls && npm run clean" | ||
"lint": "yarn lint:prettier && yarn lint:tslint", | ||
"lint:prettier": "prettier --check \"**/*.{js,ts,md}\"", | ||
"lint:tslint": "yarn tslint -c tslint.json '{lib,test}/**/*.ts'", | ||
"lint:fix": "prettier --write \"**/*.{js,ts,md}\"", | ||
"build": "tsc", | ||
"pretest": "yarn build", | ||
"test": "jest --runInBand", | ||
"precover": "yarn clean && npm run build", | ||
"cover": "jest --runInBand --coverage", | ||
"precoveralls": "yarn clean && npm run build", | ||
"coveralls": "jest --runInBand --coverage --coverageReporters=text-lcov | coveralls", | ||
"postcoveralls": "yarn clean" | ||
}, | ||
@@ -46,30 +52,35 @@ "repository": { | ||
"@commitlint/config-conventional": "^7.1.2", | ||
"@types/express": "^4.16.1", | ||
"@types/http-proxy": "^1.17.0", | ||
"@types/is-glob": "^4.0.0", | ||
"@types/jest": "^24.0.11", | ||
"@types/lodash": "^4.14.123", | ||
"@types/micromatch": "^3.1.0", | ||
"@types/node": "^12.0.4", | ||
"browser-sync": "^2.26.3", | ||
"chai": "^4.2.0", | ||
"connect": "^3.6.6", | ||
"coveralls": "^3.0.2", | ||
"coveralls": "^3.0.3", | ||
"express": "^4.16.4", | ||
"husky": "^1.2.0", | ||
"istanbul": "^0.4.5", | ||
"istanbul-coveralls": "^1.0.3", | ||
"mocha": "^5.2.0", | ||
"mocha-lcov-reporter": "1.3.0", | ||
"opn": "^5.4.0", | ||
"precise-commits": "^1.0.2", | ||
"husky": "^2.3.0", | ||
"jest": "^24.5.0", | ||
"open": "^6.3.0", | ||
"prettier": "^1.15.2", | ||
"ws": "^6.1.2" | ||
"ts-jest": "^24.0.0", | ||
"tslint": "^5.14.0", | ||
"tslint-config-prettier": "^1.18.0", | ||
"typescript": "^3.4.1", | ||
"ws": "^7.0.0" | ||
}, | ||
"dependencies": { | ||
"http-proxy": "^1.17.0", | ||
"is-glob": "^4.0.0", | ||
"is-glob": "^4.0.1", | ||
"lodash": "^4.17.11", | ||
"micromatch": "^3.1.10" | ||
"micromatch": "^4.0.2" | ||
}, | ||
"engines": { | ||
"node": ">=4.0.0" | ||
"node": ">=8.0.0" | ||
}, | ||
"husky": { | ||
"hooks": { | ||
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS", | ||
"pre-commit": "precise-commits" | ||
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS" | ||
} | ||
@@ -76,0 +87,0 @@ }, |
109
README.md
@@ -6,3 +6,3 @@ # http-proxy-middleware | ||
[](https://david-dm.org/chimurai/http-proxy-middleware#info=dependencies) | ||
[](https://snyk.io/test/npm/http-proxy-middleware) | ||
[](https://snyk.io/test/npm/http-proxy-middleware) | ||
[](https://github.com/prettier/prettier) | ||
@@ -19,9 +19,12 @@ | ||
```javascript | ||
var express = require('express') | ||
var proxy = require('http-proxy-middleware') | ||
var express = require('express'); | ||
var proxy = require('http-proxy-middleware'); | ||
var app = express() | ||
var app = express(); | ||
app.use('/api', proxy({ target: 'http://www.example.org', changeOrigin: true })) | ||
app.listen(3000) | ||
app.use( | ||
'/api', | ||
proxy({ target: 'http://www.example.org', changeOrigin: true }) | ||
); | ||
app.listen(3000); | ||
@@ -73,5 +76,5 @@ // http://localhost:3000/api/foo/bar -> http://www.example.org/api/foo/bar | ||
```javascript | ||
var proxy = require('http-proxy-middleware') | ||
var proxy = require('http-proxy-middleware'); | ||
var apiProxy = proxy('/api', { target: 'http://www.example.org' }) | ||
var apiProxy = proxy('/api', { target: 'http://www.example.org' }); | ||
// \____/ \_____________________________/ | ||
@@ -94,3 +97,3 @@ // | | | ||
// shorthand syntax for the example above: | ||
var apiProxy = proxy('http://www.example.org/api') | ||
var apiProxy = proxy('http://www.example.org/api'); | ||
``` | ||
@@ -106,4 +109,4 @@ | ||
// include dependencies | ||
var express = require('express') | ||
var proxy = require('http-proxy-middleware') | ||
var express = require('express'); | ||
var proxy = require('http-proxy-middleware'); | ||
@@ -124,11 +127,11 @@ // proxy middleware options | ||
} | ||
} | ||
}; | ||
// create the proxy (without context) | ||
var exampleProxy = proxy(options) | ||
var exampleProxy = proxy(options); | ||
// mount `exampleProxy` in web server | ||
var app = express() | ||
app.use('/api', exampleProxy) | ||
app.listen(3000) | ||
var app = express(); | ||
app.use('/api', exampleProxy); | ||
app.listen(3000); | ||
``` | ||
@@ -181,6 +184,6 @@ | ||
var filter = function(pathname, req) { | ||
return pathname.match('^/api') && req.method === 'GET' | ||
} | ||
return pathname.match('^/api') && req.method === 'GET'; | ||
}; | ||
var apiProxy = proxy(filter, { target: 'http://www.example.org' }) | ||
var apiProxy = proxy(filter, { target: 'http://www.example.org' }); | ||
``` | ||
@@ -234,3 +237,3 @@ | ||
// replace the default console log provider. | ||
return require('winston') | ||
return require('winston'); | ||
} | ||
@@ -242,3 +245,3 @@ ``` | ||
function logProvider(provider) { | ||
var logger = new (require('winston')).Logger() | ||
var logger = new (require('winston')).Logger(); | ||
@@ -251,10 +254,7 @@ var myCustomProvider = { | ||
error: logger.error | ||
} | ||
return myCustomProvider | ||
}; | ||
return myCustomProvider; | ||
} | ||
``` | ||
- (DEPRECATED) **option.proxyHost**: Use `option.changeOrigin = true` instead. | ||
- (DEPRECATED) **option.proxyTable**: Use `option.router` instead. | ||
### http-proxy events | ||
@@ -270,6 +270,6 @@ | ||
'Content-Type': 'text/plain' | ||
}) | ||
}); | ||
res.end( | ||
'Something went wrong. And we are reporting a custom error message.' | ||
) | ||
); | ||
} | ||
@@ -282,4 +282,4 @@ ``` | ||
function onProxyRes(proxyRes, req, res) { | ||
proxyRes.headers['x-added'] = 'foobar' // add new header to response | ||
delete proxyRes.headers['x-removed'] // remove header from response | ||
proxyRes.headers['x-added'] = 'foobar'; // add new header to response | ||
delete proxyRes.headers['x-removed']; // remove header from response | ||
} | ||
@@ -293,3 +293,3 @@ ``` | ||
// add custom header to request | ||
proxyReq.setHeader('x-added', 'foobar') | ||
proxyReq.setHeader('x-added', 'foobar'); | ||
// or log the req | ||
@@ -304,3 +304,3 @@ } | ||
// add custom header | ||
proxyReq.setHeader('X-Special-Proxy-Header', 'foobar') | ||
proxyReq.setHeader('X-Special-Proxy-Header', 'foobar'); | ||
} | ||
@@ -314,3 +314,3 @@ ``` | ||
// listen for messages coming FROM the target here | ||
proxySocket.on('data', hybiParseAndLogMessage) | ||
proxySocket.on('data', hybiParseAndLogMessage); | ||
} | ||
@@ -323,3 +323,3 @@ ``` | ||
// view disconnected websocket connections | ||
console.log('Client disconnected') | ||
console.log('Client disconnected'); | ||
} | ||
@@ -402,9 +402,9 @@ ``` | ||
```javascript | ||
proxy('http://www.example.org:8000/api') | ||
proxy('http://www.example.org:8000/api'); | ||
// proxy('/api', {target: 'http://www.example.org:8000'}); | ||
proxy('http://www.example.org:8000/api/books/*/**.json') | ||
proxy('http://www.example.org:8000/api/books/*/**.json'); | ||
// proxy('/api/books/*/**.json', {target: 'http://www.example.org:8000'}); | ||
proxy('http://www.example.org:8000/api', { changeOrigin: true }) | ||
proxy('http://www.example.org:8000/api', { changeOrigin: true }); | ||
// proxy('/api', {target: 'http://www.example.org:8000', changeOrigin: true}); | ||
@@ -419,3 +419,6 @@ ``` | ||
```javascript | ||
app.use('/api', proxy({ target: 'http://www.example.org', changeOrigin: true })) | ||
app.use( | ||
'/api', | ||
proxy({ target: 'http://www.example.org', changeOrigin: true }) | ||
); | ||
``` | ||
@@ -432,9 +435,9 @@ | ||
// verbose api | ||
proxy('/', { target: 'http://echo.websocket.org', ws: true }) | ||
proxy('/', { target: 'http://echo.websocket.org', ws: true }); | ||
// shorthand | ||
proxy('http://echo.websocket.org', { ws: true }) | ||
proxy('http://echo.websocket.org', { ws: true }); | ||
// shorter shorthand | ||
proxy('ws://echo.websocket.org') | ||
proxy('ws://echo.websocket.org'); | ||
``` | ||
@@ -447,9 +450,9 @@ | ||
```javascript | ||
var wsProxy = proxy('ws://echo.websocket.org', { changeOrigin: true }) | ||
var wsProxy = proxy('ws://echo.websocket.org', { changeOrigin: true }); | ||
var app = express() | ||
app.use(wsProxy) | ||
var app = express(); | ||
app.use(wsProxy); | ||
var server = app.listen(3000) | ||
server.on('upgrade', wsProxy.upgrade) // <-- subscribe to http 'upgrade' | ||
var server = app.listen(3000); | ||
server.on('upgrade', wsProxy.upgrade); // <-- subscribe to http 'upgrade' | ||
``` | ||
@@ -491,12 +494,16 @@ | ||
# install dependencies | ||
$ npm install | ||
$ yarn | ||
# linting | ||
$ npm run lint | ||
$ yarn lint | ||
$ yarn lint:fix | ||
# building (compile typescript to js) | ||
$ yarn build | ||
# unit tests | ||
$ npm test | ||
$ yarn test | ||
# code coverage | ||
$ npm run cover | ||
$ yarn cover | ||
``` | ||
@@ -512,2 +519,2 @@ | ||
Copyright (c) 2015-2018 Steven Chim | ||
Copyright (c) 2015-2019 Steven Chim |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
51162
7.15%499
1.42%22
37.5%634
-6.76%2
100%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated