mirror of
https://gitee.com/java110/MicroCommunityWeb.git
synced 2026-02-24 21:59:12 +08:00
151 lines
4.2 KiB
JavaScript
Executable File
151 lines
4.2 KiB
JavaScript
Executable File
'use strict';
|
|
|
|
var assert = require('assert');
|
|
var express = require('express');
|
|
var http = require('http');
|
|
var request = require('supertest');
|
|
var proxy = require('../');
|
|
var proxyTarget = require('../test/support/proxyTarget');
|
|
|
|
describe('proxyReqOptDecorator', function () {
|
|
var server;
|
|
|
|
this.timeout(10000);
|
|
|
|
before(function () {
|
|
var handlers = [{
|
|
method: 'get',
|
|
path: '/working',
|
|
fn: function (req, res) {
|
|
res.send({ headers: req.headers });
|
|
}
|
|
}];
|
|
|
|
server = proxyTarget(12345, 100, handlers);
|
|
});
|
|
|
|
after(function () {
|
|
server.close();
|
|
});
|
|
|
|
this.timeout(10000);
|
|
|
|
var app;
|
|
|
|
beforeEach(function () {
|
|
app = express();
|
|
app.use(proxy('localhost:12345'));
|
|
});
|
|
|
|
describe('allows authors to modify a number of request parameters', function () {
|
|
it('modify headers', function (done) {
|
|
app = express();
|
|
app.use(proxy('localhost:12345', {
|
|
proxyReqOptDecorator: function (reqOpt) {
|
|
reqOpt.headers['user-agent'] = 'test user agent';
|
|
reqOpt.headers.mmmmmmmmmm = 'misty mountain hop';
|
|
return reqOpt;
|
|
}
|
|
}));
|
|
|
|
request(app)
|
|
.get('/working')
|
|
.end(function (err, res) {
|
|
if (err) { return done(err); }
|
|
|
|
assert.equal(res.body.headers['user-agent'], 'test user agent');
|
|
assert.equal(res.body.headers.mmmmmmmmmm, 'misty mountain hop');
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe('when proxyReqOptDecorator is a simple function (non Promise)', function () {
|
|
it('can modify headers', function (done) {
|
|
var app = express();
|
|
app.use(proxy('localhost:12345', {
|
|
proxyReqOptDecorator: function (reqOpt, req) {
|
|
reqOpt.headers['user-agent'] = 'test user agent';
|
|
assert(req instanceof http.IncomingMessage);
|
|
return reqOpt;
|
|
}
|
|
}));
|
|
|
|
request(app)
|
|
.get('/working')
|
|
.end(function (err, res) {
|
|
if (err) { return done(err); }
|
|
assert.equal(res.body.headers['user-agent'], 'test user agent');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when proxyReqOptDecorator is a Promise', function () {
|
|
it('should mutate the proxied request', function (done) {
|
|
var app = express();
|
|
app.use(proxy('localhost:12345', {
|
|
proxyReqOptDecorator: function (reqOpt, req) {
|
|
assert(req instanceof http.IncomingMessage);
|
|
return new Promise(function (resolve) {
|
|
reqOpt.headers['user-agent'] = 'test user agent';
|
|
resolve(reqOpt);
|
|
});
|
|
}
|
|
}));
|
|
|
|
request(app)
|
|
.get('/working')
|
|
.end(function (err, res) {
|
|
if (err) { return done(err); }
|
|
assert.equal(res.body.headers['user-agent'], 'test user agent');
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe('when the Promise is rejected', function () {
|
|
it('returns err to host application for processing', function (done) {
|
|
var app = express();
|
|
|
|
app.use(proxy('/reject-promise', {
|
|
proxyReqOptDecorator: function () {
|
|
return Promise.reject('An arbitrary rejection message.');
|
|
}
|
|
}));
|
|
|
|
/* jshint ignore:start */
|
|
app.use(function (err, req, res, next) { // eslint-disable-line no-unused-vars
|
|
assert(err === 'An arbitrary rejection message.');
|
|
res.status(221).send(err);
|
|
});
|
|
/* jshint ignore:end */
|
|
|
|
request(app)
|
|
.get('/reject-promise')
|
|
.expect(221, done); // ensures we've entered the handler with assert above
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('proxyReqOptDecorator has access to the source request\'s data', function () {
|
|
it('should have access to ip', function (done) {
|
|
var app = express();
|
|
app.use(proxy('localhost:12345', {
|
|
proxyReqOptDecorator: function (reqOpts, req) {
|
|
assert(req instanceof http.IncomingMessage);
|
|
assert(req.ip);
|
|
return reqOpts;
|
|
}
|
|
}));
|
|
|
|
request(app)
|
|
.get('/working')
|
|
.end(function (err) {
|
|
if (err) { return done(err); }
|
|
done();
|
|
});
|
|
|
|
});
|
|
});
|
|
});
|