server.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. const { Nuxt, Builder } = require('nuxt')
  2. const app = require('express')()
  3. const proxy = require('http-proxy-middleware')
  4. const cookiejar = require('cookiejar')
  5. const isProd = (process.env.NODE_ENV === 'production')
  6. const host = process.env.HOST || '127.0.0.1'
  7. const port = process.env.PORT || 3333
  8. process.noDeprecation = true
  9. app.set('port', port)
  10. // We instantiate nuxt.js with the options
  11. const config = require('./nuxt.config.js')
  12. config.dev = !isProd
  13. // 请求代理,dev模式下使用,接口服务器如果支持跨域可去掉
  14. const proxyTable = config.proxyTable
  15. if (proxyTable) {
  16. // 本地代理支持localhost、127.0.0.1等不同地址跨域
  17. app.use((req, res, next) => {
  18. res.header('Access-Control-Allow-Origin', '*')
  19. res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,TRACE,OPTIONS,PATCH')
  20. res.header('Access-Control-Allow-Headers', 'Origin,X-Requested-With,Content-Type,Accept,withCredentials')
  21. res.header('Access-Control-Allow-Credentials', 'true')
  22. if (res.req.headers.referer && res.req.headers.referer.substring(res.req.headers.referer.length - 9, res.req.headers.referer.length) === '?type=erp') {
  23. res.cookie('type', 'erp')
  24. }
  25. next()
  26. })
  27. if (Array.isArray(proxyTable)) {
  28. app.use(proxy(proxyTable, {
  29. target: config.env.baseUrl,
  30. changeOrigin: true,
  31. logLevel: config.dev ? 'debug' : 'info',
  32. onProxyRes: (proxyRes) => {
  33. const setCookieHeaders = proxyRes.headers['set-cookie'] || []
  34. const modifiedSetCookieHeaders = setCookieHeaders
  35. .map(str => new cookiejar.Cookie(str))
  36. .map(cookie => {
  37. cookie.path = '/'
  38. return cookie
  39. })
  40. .map(cookie => cookie.toString())
  41. proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
  42. }
  43. }))
  44. } else {
  45. Object.keys(proxyTable).forEach((context) => {
  46. let options = proxyTable[context]
  47. if (typeof options === 'string') {
  48. options = { target: options }
  49. }
  50. app.use(proxy(context, options))
  51. })
  52. }
  53. // axios use proxy url
  54. config.env.proxyUrl = '/'
  55. }
  56. const nuxt = new Nuxt(config)
  57. // Render every route with Nuxt.js
  58. app.use(nuxt.render)
  59. // Build only in dev mode with hot-reloading
  60. if (config.dev) {
  61. new Builder(nuxt).build()
  62. .then(listen)
  63. .catch((error) => {
  64. console.error(error)
  65. process.exit(1)
  66. })
  67. }
  68. else {
  69. listen()
  70. }
  71. function listen() {
  72. // Listen the server
  73. app.listen(port);
  74. console.log(`\n Server listening on ${host}:${port}, at ${new Date().toLocaleString()} \n to api ${config.env.baseUrl}`)
  75. }