63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var gulp = require('gulp'),
|
||
|
util = require('./utils'),
|
||
|
url = require('url'),
|
||
|
browserSync = require('browser-sync'),
|
||
|
proxy = require('proxy-middleware');
|
||
|
|
||
|
var config = require('./config');
|
||
|
|
||
|
module.exports = function () {
|
||
|
var baseUri = config.uri + config.apiPort;
|
||
|
// Routes to proxy to the backend. Routes ending with a / will setup
|
||
|
// a redirect so that if accessed without a trailing slash, will
|
||
|
// redirect. This is required for some endpoints for proxy-middleware
|
||
|
// to correctly handle them.
|
||
|
var proxyRoutes = [
|
||
|
'/'
|
||
|
];
|
||
|
|
||
|
var requireTrailingSlash = proxyRoutes.filter(function (r) {
|
||
|
return util.endsWith(r, '/');
|
||
|
}).map(function (r) {
|
||
|
// Strip trailing slash so we can use the route to match requests
|
||
|
// with non trailing slash
|
||
|
return r.substr(0, r.length - 1);
|
||
|
});
|
||
|
|
||
|
var proxies = [
|
||
|
// Ensure trailing slash in routes that require it
|
||
|
function (req, res, next) {
|
||
|
requireTrailingSlash.forEach(function (route){
|
||
|
if (url.parse(req.url).path === route) {
|
||
|
res.statusCode = 301;
|
||
|
res.setHeader('Location', route + '/');
|
||
|
res.end();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
next();
|
||
|
}
|
||
|
]
|
||
|
.concat(
|
||
|
// Build a list of proxies for routes: [route1_proxy, route2_proxy, ...]
|
||
|
proxyRoutes.map(function (r) {
|
||
|
var options = url.parse(baseUri + r);
|
||
|
options.route = r;
|
||
|
options.preserveHost = true;
|
||
|
return proxy(options);
|
||
|
}));
|
||
|
|
||
|
browserSync({
|
||
|
open: true,
|
||
|
port: config.port,
|
||
|
server: {
|
||
|
baseDir: config.app,
|
||
|
middleware: proxies
|
||
|
}
|
||
|
});
|
||
|
|
||
|
gulp.start('watch');
|
||
|
};
|