UNPKG

ember-cli

Version:

Command line tool for developing ambitious ember.js apps

61 lines (49 loc) 1.69 kB
'use strict'; // eslint-disable-next-line const isLiveReloadRequest = require('../../../../utilities/is-live-reload-request'); class ProxyServerAddon { constructor(project) { this.project = project; this.name = 'proxy-server-middleware'; } serverMiddleware(options) { let app = options.app, server = options.options.httpServer; options = options.options; if (options.proxy) { let proxy = require('http-proxy').createProxyServer({ target: options.proxy, ws: true, secure: options.secureProxy, changeOrigin: true, xfwd: options.transparentProxy, preserveHeaderKeyCase: true, proxyTimeout: options.proxyOutTimeout, timeout: options.proxyInTimeout, }); proxy.on('error', (e, req, res) => { options.ui.writeLine(`Error proxying to ${options.proxy}`); options.ui.writeError(e); if (typeof res.status === 'function') { res.status(502); res.end(); } }); const morgan = require('morgan'); options.ui.writeLine(`Proxying to ${options.proxy}`); server.on('upgrade', (req, socket, head) => { this.handleProxiedRequest({ req, socket, head, options, proxy }); }); app.use(morgan('dev')); app.use((req, res) => proxy.web(req, res)); } } handleProxiedRequest({ req, socket, head, options, proxy }) { if (!isLiveReloadRequest(req.url, options.liveReloadPrefix)) { options.ui.writeLine(`Proxying websocket to ${req.url}`); socket.on('error', (e) => proxy.emit('error', e)); proxy.ws(req, socket, head); } } } module.exports = ProxyServerAddon;