server.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const Nuxt = require('nuxt')
  2. const app = require('express')()
  3. const proxy = require('http-proxy-middleware')
  4. const cookiejar = require('cookiejar')
  5. const host = process.env.HOST || '127.0.0.1'
  6. const port = process.env.PORT || 3000
  7. process.noDeprecation = true
  8. // const url = require('url')
  9. app.set('port', port)
  10. // Import and Set Nuxt.js options
  11. let config = require('./nuxt.config.js')
  12. config.dev = !(process.env.NODE_ENV === 'production')
  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,PUT,POST,DELETE')
  20. res.header('Access-Control-Allow-Headers', 'Content-Type')
  21. res.header('Access-Control-Allow-Credentials', 'true')
  22. // const refer = res.req.headers.referer
  23. // if (refer && url.parse(refer, true).query.type === 'erp') {
  24. // res.cookie('type', 'erp')
  25. // }
  26. next()
  27. })
  28. const defaultOptions = {
  29. target: config.env.baseUrl,
  30. changeOrigin: true,
  31. onProxyRes: (proxyRes) => {
  32. const setCookieHeaders = proxyRes.headers['set-cookie'] || []
  33. const modifiedSetCookieHeaders = setCookieHeaders
  34. .map(str => new cookiejar.Cookie(str))
  35. .map(cookie => {
  36. cookie.path = '/'
  37. return cookie
  38. })
  39. .map(cookie => cookie.toString())
  40. proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
  41. }
  42. }
  43. if (Array.isArray(proxyTable)) {
  44. app.use(proxy(proxyTable, defaultOptions))
  45. } else {
  46. Object.keys(proxyTable).forEach((context) => {
  47. var options = proxyTable[context]
  48. if (typeof options === 'string') {
  49. options = {target: options}
  50. }
  51. app.use(proxy(context, Object.assign(defaultOptions, options)))
  52. })
  53. }
  54. // axios use proxy url
  55. config.env.proxyUrl = '/'
  56. }
  57. // Init Nuxt.js
  58. const nuxt = new Nuxt(config)
  59. app.use(nuxt.render)
  60. // Build only in dev mode
  61. if (config.dev) {
  62. nuxt.build()
  63. .catch((error) => {
  64. // eslint-disable-line no-console
  65. console.error(error)
  66. process.exit(1)
  67. })
  68. }
  69. // Listen the server
  70. app.listen(port)
  71. // eslint-disable-line no-console
  72. console.log(`Nuxt.js SSR Server listening on ${host} : ${port}, at ${new Date().toLocaleString()} \nusing api ${config.env.baseUrl}`)