|
|
'use strict'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var ScopeContainer = require('./lib/scopeContainer'); |
|
|
var assert = require('assert'); |
|
|
var debug = require('debug')('express-http-proxy'); |
|
|
|
|
|
var buildProxyReq = require('./app/steps/buildProxyReq'); |
|
|
var copyProxyResHeadersToUserRes = require('./app/steps/copyProxyResHeadersToUserRes'); |
|
|
var decorateProxyReqBody = require('./app/steps/decorateProxyReqBody'); |
|
|
var decorateProxyReqOpts = require('./app/steps/decorateProxyReqOpts'); |
|
|
var decorateUserRes = require('./app/steps/decorateUserRes'); |
|
|
var decorateUserResHeaders = require('./app/steps/decorateUserResHeaders'); |
|
|
var filterUserRequest = require('./app/steps/filterUserRequest'); |
|
|
var handleProxyErrors = require('./app/steps/handleProxyErrors'); |
|
|
var maybeSkipToNextHandler = require('./app/steps/maybeSkipToNextHandler'); |
|
|
var prepareProxyReq = require('./app/steps/prepareProxyReq'); |
|
|
var resolveProxyHost = require('./app/steps/resolveProxyHost'); |
|
|
var resolveProxyReqPath = require('./app/steps/resolveProxyReqPath'); |
|
|
var sendProxyRequest = require('./app/steps/sendProxyRequest'); |
|
|
var sendUserRes = require('./app/steps/sendUserRes'); |
|
|
|
|
|
module.exports = function proxy(host, userOptions) { |
|
|
assert(host, 'Host should not be empty'); |
|
|
|
|
|
return function handleProxy(req, res, next) { |
|
|
debug('[start proxy] ' + req.path); |
|
|
var container = new ScopeContainer(req, res, next, host, userOptions); |
|
|
|
|
|
filterUserRequest(container) |
|
|
.then(buildProxyReq) |
|
|
.then(resolveProxyHost) |
|
|
.then(decorateProxyReqOpts) |
|
|
.then(resolveProxyReqPath) |
|
|
.then(decorateProxyReqBody) |
|
|
.then(prepareProxyReq) |
|
|
.then(sendProxyRequest) |
|
|
.then(maybeSkipToNextHandler) |
|
|
.then(copyProxyResHeadersToUserRes) |
|
|
.then(decorateUserResHeaders) |
|
|
.then(decorateUserRes) |
|
|
.then(sendUserRes) |
|
|
.catch(function (err) { |
|
|
|
|
|
|
|
|
|
|
|
if (err) { |
|
|
var resolver = (container.options.proxyErrorHandler) ? |
|
|
container.options.proxyErrorHandler : |
|
|
handleProxyErrors; |
|
|
resolver(err, res, next); |
|
|
} else { |
|
|
next(); |
|
|
} |
|
|
}); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|