server.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. const { Nuxt, Builder } = require('nuxt')
  2. const express = require('express')
  3. const app = express()
  4. const proxy = require('http-proxy-middleware')
  5. const cookiejar = require('cookiejar')
  6. const host = process.env.HOST || '127.0.0.1'
  7. const port = process.env.PORT || 3000
  8. // const fs = require('fs')
  9. // const path = require('path')
  10. // 引用静态资源
  11. // app.use(express.static('static'))
  12. process.noDeprecation = true
  13. // // 买家中心
  14. // app.get('/user', (req, res, next) => {
  15. // res.sendfile('static/views/normal/user_center.html')
  16. // })
  17. //
  18. // // 卖家中心
  19. //
  20. // app.use('*', (req, res, next) => {
  21. // // console.log(req)
  22. // next()
  23. // })
  24. // 账户中心接口统一转发
  25. app.get('/ssoPrefix/**', (req, res, next) => {
  26. res.redirect(req.url.replace('/ssoPrefix', ''))
  27. next()
  28. })
  29. app.all('*', (req, res, next) => {
  30. if (req.url.indexOf('/basic/enterprise/openVendor') > -1) {
  31. console.log(new Date(), req.url)
  32. }
  33. next()
  34. })
  35. app.set('port', port)
  36. // Import and Set Nuxt.js options
  37. let config = require('./nuxt.config.js')
  38. config.dev = !(process.env.NODE_ENV === 'production')
  39. // 请求代理,dev模式下使用,接口服务器如果支持跨域可去掉
  40. const proxyTable = config.proxyTable
  41. if (proxyTable) {
  42. // 本地代理支持localhost、127.0.0.1等不同地址跨域
  43. app.use((req, res, next) => {
  44. res.header('Access-Control-Allow-Origin', '*')
  45. res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE')
  46. res.header('Access-Control-Allow-Headers', 'Content-Type')
  47. res.header('Access-Control-Allow-Credentials', 'true')
  48. // const refer = res.req.headers.referer
  49. // if (refer && url.parse(refer, true).query.type === 'erp') {
  50. // res.cookie('type', 'erp')
  51. // }
  52. next()
  53. })
  54. const defaultOptions = {
  55. target: config.env.baseUrl,
  56. changeOrigin: true,
  57. onProxyRes: (proxyRes) => {
  58. const setCookieHeaders = proxyRes.headers['set-cookie'] || []
  59. const modifiedSetCookieHeaders = setCookieHeaders
  60. .map(str => new cookiejar.Cookie(str))
  61. .map(cookie => {
  62. cookie.path = '/'
  63. return cookie
  64. })
  65. .map(cookie => cookie.toString())
  66. proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
  67. }
  68. }
  69. if (Array.isArray(proxyTable)) {
  70. app.use(proxy(proxyTable, defaultOptions))
  71. } else {
  72. Object.keys(proxyTable).forEach((context) => {
  73. var options = proxyTable[context]
  74. if (typeof options === 'string') {
  75. options = { target: options }
  76. }
  77. app.use(proxy(context, Object.assign(defaultOptions, options)))
  78. })
  79. }
  80. // axios use proxy url
  81. config.env.proxyUrl = '/'
  82. }
  83. // Init Nuxt.js
  84. const nuxt = new Nuxt(config)
  85. app.use(nuxt.render)
  86. // Build only in dev mode
  87. if (config.dev) {
  88. new Builder(nuxt).build()
  89. .catch((error) => {
  90. // eslint-disable-line no-console
  91. console.error(error)
  92. process.exit(1)
  93. })
  94. }
  95. app.listen(port, '0.0.0.0')
  96. console.log(`Nuxt.js SSR Server listening on ${host} : ${port}, at ${new Date().toLocaleString()} \nusing api ${config.env.baseUrl}`)