| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- const { Nuxt, Builder } = require('nuxt')
- const app = require('express')()
- const proxy = require('http-proxy-middleware')
- const cookiejar = require('cookiejar')
- const isProd = (process.env.NODE_ENV === 'production')
- const host = process.env.HOST || '127.0.0.1'
- const port = process.env.PORT || 3333
- process.noDeprecation = true
- app.set('port', port)
- // We instantiate nuxt.js with the options
- const config = require('./nuxt.config.js')
- config.dev = !isProd
- // 请求代理,dev模式下使用,接口服务器如果支持跨域可去掉
- const proxyTable = config.proxyTable
- if (proxyTable) {
- // 本地代理支持localhost、127.0.0.1等不同地址跨域
- app.use((req, res, next) => {
- res.header('Access-Control-Allow-Origin', '*')
- res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,TRACE,OPTIONS,PATCH')
- res.header('Access-Control-Allow-Headers', 'Origin,X-Requested-With,Content-Type,Accept,withCredentials')
- res.header('Access-Control-Allow-Credentials', 'true')
- if (res.req.headers.referer && res.req.headers.referer.substring(res.req.headers.referer.length - 9, res.req.headers.referer.length) === '?type=erp') {
- res.cookie('type', 'erp')
- }
- next()
- })
- if (Array.isArray(proxyTable)) {
- app.use(proxy(proxyTable, {
- target: config.env.baseUrl,
- changeOrigin: true,
- onProxyRes: (proxyRes) => {
- const setCookieHeaders = proxyRes.headers['set-cookie'] || []
- const modifiedSetCookieHeaders = setCookieHeaders
- .map(str => new cookiejar.Cookie(str))
- .map(cookie => {
- cookie.path = '/'
- return cookie
- })
- .map(cookie => cookie.toString())
- proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
- }
- }))
- } else {
- Object.keys(proxyTable).forEach((context) => {
- let options = proxyTable[context]
- if (typeof options === 'string') {
- options = { target: options }
- }
- app.use(proxy(context, options))
- })
- }
- // axios use proxy url
- config.env.proxyUrl = '/'
- }
- const nuxt = new Nuxt(config)
- // Render every route with Nuxt.js
- app.use(nuxt.render)
- // Build only in dev mode with hot-reloading
- if (config.dev) {
- new Builder(nuxt).build()
- .then(listen)
- .catch((error) => {
- console.error(error)
- process.exit(1)
- })
- }
- else {
- listen()
- }
- function listen() {
- // Listen the server
- app.listen(port);
- console.log(`\n Server listening on ${host}:${port}, at ${new Date().toLocaleString()} \n to api ${config.env.baseUrl}`)
- }
|