forked from daren.hsu/line_push
71 lines
1.8 KiB
JavaScript
71 lines
1.8 KiB
JavaScript
const { createProxyMiddleware } = require('http-proxy-middleware')
|
|
const logger = require('./logger')
|
|
|
|
// Redirect info ~> debug
|
|
logger.info = logger.debug
|
|
|
|
function proxyModule (options) {
|
|
if (!this.options.proxy) {
|
|
// No proxy defined
|
|
logger.warn('No proxy defined on top level.')
|
|
return
|
|
}
|
|
|
|
if (this.options.mode !== 'spa') {
|
|
this.nuxt.hook('generate:before', () => {
|
|
logger.warn('The module `@nuxtjs/proxy` does not work in generated mode.')
|
|
})
|
|
}
|
|
|
|
// Defaults
|
|
const defaults = Object.assign(
|
|
{
|
|
// Required for virtual hosted sites
|
|
changeOrigin: true,
|
|
// Proxy webSockets
|
|
ws: true,
|
|
// Use consola as default logger
|
|
logProvider: () => logger
|
|
},
|
|
options
|
|
)
|
|
|
|
delete defaults.src
|
|
|
|
// Normalize options.proxy to middleware arguments
|
|
const applyDefaults = o => Object.assign({}, defaults, o)
|
|
const normalizeTarget = o => (typeof o === 'object' ? o : { target: o })
|
|
|
|
const proxy = []
|
|
if (Array.isArray(this.options.proxy)) {
|
|
// Array mode
|
|
this.options.proxy.forEach((p) => {
|
|
if (Array.isArray(p)) {
|
|
proxy.push([p[0], applyDefaults(normalizeTarget(p[1]))])
|
|
} else {
|
|
proxy.push([p, applyDefaults()])
|
|
}
|
|
})
|
|
} else {
|
|
// Object mode
|
|
Object.keys(this.options.proxy).forEach((context) => {
|
|
proxy.push([
|
|
context,
|
|
applyDefaults(normalizeTarget(this.options.proxy[context]))
|
|
])
|
|
})
|
|
}
|
|
|
|
// Register middleware
|
|
proxy.forEach((args) => {
|
|
// https://github.com/chimurai/http-proxy-middleware
|
|
this.addServerMiddleware({
|
|
prefix: false, // http-proxy-middleware uses req.originalUrl
|
|
handler: createProxyMiddleware(...args)
|
|
})
|
|
})
|
|
}
|
|
|
|
module.exports = proxyModule
|
|
module.exports.meta = require('../package.json')
|