What is express-http-proxy?
The express-http-proxy package is a middleware for Express.js that allows you to easily proxy HTTP requests to another server. It is useful for creating APIs that aggregate data from multiple sources, handling cross-origin requests, and more.
What are express-http-proxy's main functionalities?
Basic Proxying
This feature allows you to proxy requests from your Express server to another server. In this example, any request to '/proxy' will be forwarded to 'http://example.com'.
const express = require('express');
const proxy = require('express-http-proxy');
const app = express();
app.use('/proxy', proxy('http://example.com'));
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Customizing Proxy Requests
This feature allows you to customize the path of the proxied request. In this example, any request to '/proxy' will be forwarded to 'http://example.com/api' with the original request URL appended.
const express = require('express');
const proxy = require('express-http-proxy');
const app = express();
app.use('/proxy', proxy('http://example.com', {
proxyReqPathResolver: function(req) {
return '/api' + req.url;
}
}));
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Handling Proxy Responses
This feature allows you to modify the response from the proxied server before sending it back to the client. In this example, the word 'example' in the response body is replaced with 'sample'.
const express = require('express');
const proxy = require('express-http-proxy');
const app = express();
app.use('/proxy', proxy('http://example.com', {
userResDecorator: function(proxyRes, proxyResData, userReq, userRes) {
return proxyResData.toString('utf8').replace('example', 'sample');
}
}));
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Other packages similar to express-http-proxy
http-proxy-middleware
http-proxy-middleware is a popular middleware for creating proxies in Express.js. It offers more advanced features like path rewriting, logging, and WebSocket support. Compared to express-http-proxy, it provides more flexibility and is more actively maintained.
node-http-proxy
node-http-proxy is a low-level HTTP proxy library for Node.js. It provides a lot of customization options and can be used to create complex proxy servers. While it is more powerful, it requires more setup and configuration compared to express-http-proxy.
express-proxy
express-proxy is another middleware for proxying HTTP requests in Express.js. It is simpler and less feature-rich compared to express-http-proxy, making it suitable for basic proxying needs.
express-http-proxy
NOTE: As work content changed, I have no spare time to maintaining this node module, It's appreciated if anyone want to take or keep maintaining, just contact me via jky239@gmail.com with Title contains: "Wanted: npm package xxxx". Thx.
Express proxy middleware to forward request to another host and pass response back
Install
$ npm install express-http-proxy --save
Usage
If you want to set up proxy for URL starting with /proxy
var proxy = require('express-http-proxy');
var app = require('express')();
app.use('/proxy', proxy('www.google.com', {
forwardPath: function(req, res) {
return require('url').parse(req.url).path;
}
}));
If you only want to proxy get request
app.use('/proxy', proxy('www.google.com', {
filter: function(req, res) {
return req.method == 'GET';
},
forwardPath: function(req, res) {
return require('url').parse(req.url).path;
}
}));
You can also intercept the response before sending it back to the client, or change the request options before it is sent to the target:
app.use('/proxy', proxy('www.google.com', {
forwardPath: function(req, res) {
return require('url').parse(req.url).path;
},
intercept: function(rsp, data, req, res, callback) {
data = JSON.parse(data.toString('utf8'));
callback(null, JSON.stringify(data));
},
decorateRequest: function(req) {
req.headers['Content-Type'] = '';
req.method = 'GET';
req.bodyContent = wrap(req.bodyContent);
return req;
}
}));
You can copy the host HTTP header to the proxied express server using the preserveHostHdr
option.
app.use('/proxy', proxy('www.google.com', {
forwardPath: function(req, res) {
return require('url').parse(req.url).path;
},
preserveHostHdr: true
}));
Release Notes
Release | Notes |
---|
0.4.0 | Signature of intercept callback changed from function(data, req, res, callback) to function(rsp, data, req, res, callback) where rsp is the original response from the target |
Licence
MIT