Spaces:
Building
Building
| /** | |
| * CORS Anywhere is designed for use as a standalone server. Sometimes you want | |
| * to have extra functionality on top of the default CORS server. If it may be | |
| * useful to others, please open a feature request on the issue tracker at | |
| * https://github.com/Rob--W/cors-anywhere/issues. | |
| * | |
| * If it is only useful to your application, look below for some examples. | |
| * These examples are provided as-is without guarantees. Use at your own risk. | |
| */ | |
| /* eslint-env mocha */ | |
| require('./setup'); | |
| var createServer = require('../').createServer; | |
| var assert = require('assert'); | |
| var request = require('supertest'); | |
| var http = require('http'); | |
| describe('Examples', function() { | |
| // Note: In the examples below we don't listen on any port after calling | |
| // createServer() because it is not needed to start listening on a port if the | |
| // CORS Anywhere is only used internally. | |
| // And normally you have to listen on some port, like this: | |
| // | |
| // http_server.listen(port_number); | |
| // | |
| // But in these test, the call to request() automatically handles that part so | |
| // the examples don't have an explicit .listen() call. | |
| it('Rewrite proxy URL', function(done) { | |
| var cors_anywhere = createServer(); | |
| var http_server = http.createServer(function(req, res) { | |
| // For testing, check whether req.url is the same as what we input below. | |
| assert.strictEqual(req.url, '/dummy-for-testing'); | |
| // Basic example: Always proxy example.com. | |
| req.url = '/http://example.com'; | |
| cors_anywhere.emit('request', req, res); | |
| }); | |
| request(http_server) | |
| .get('/dummy-for-testing') | |
| .expect('Access-Control-Allow-Origin', '*') | |
| .expect('x-request-url', 'http://example.com/') | |
| .expect(200, 'Response from example.com', done); | |
| }); | |
| it('Transform response to uppercase (streaming)', function(done) { | |
| var cors_anywhere = createServer(); | |
| var http_server = http.createServer(function(req, res) { | |
| var originalWrite = res.write; | |
| res.write = function(data, encoding, callback) { | |
| if (Buffer.isBuffer(data)) { | |
| data = data.toString(); | |
| } | |
| assert.strictEqual(typeof data, 'string'); | |
| // This example shows how to transform the response to upper case. | |
| data = data.toUpperCase(); | |
| originalWrite.call(this, data, encoding, callback); | |
| }; | |
| cors_anywhere.emit('request', req, res); | |
| }); | |
| request(http_server) | |
| .get('/example.com') | |
| .expect('Access-Control-Allow-Origin', '*') | |
| .expect('x-request-url', 'http://example.com/') | |
| .expect(200, 'RESPONSE FROM EXAMPLE.COM', done); | |
| }); | |
| it('Transform response to uppercase (buffered)', function(done) { | |
| var cors_anywhere = createServer(); | |
| var http_server = http.createServer(function(req, res) { | |
| var originalWrite = res.write; | |
| var originalEnd = res.end; | |
| var buffers = []; | |
| res.write = function(data, encoding, callback) { | |
| assert.ok(Buffer.isBuffer(data) || typeof data === 'string'); | |
| buffers.push(data); | |
| if (callback) { | |
| process.nextTick(callback, null); | |
| } | |
| }; | |
| res.end = function(data, encoding, callback) { | |
| if (data) { | |
| this.write(data, encoding); | |
| } | |
| // After calling .end(), .write shouldn't be called any more. So let's | |
| // restore it so that the default error handling for writing to closed | |
| // streams would occur. | |
| this.write = originalWrite; | |
| // Combine all chunks. Note that we're assuming that all chunks are | |
| // utf8 strings or buffers whose content is utf8-encoded. If this | |
| // assumption is not true, then you have to update the .write method | |
| // above. | |
| data = buffers.join(''); | |
| // This example shows how to transform the response to upper case. | |
| data = data.toUpperCase(); | |
| // .end should be called once, so let's restore it so that any default | |
| // error handling occurs if it occurs again. | |
| this.end = originalEnd; | |
| this.end(data, 'utf8', callback); | |
| }; | |
| cors_anywhere.emit('request', req, res); | |
| }); | |
| request(http_server) | |
| .get('/example.com') | |
| .expect('Access-Control-Allow-Origin', '*') | |
| .expect('x-request-url', 'http://example.com/') | |
| .expect(200, 'RESPONSE FROM EXAMPLE.COM', done); | |
| }); | |
| }); | |