server.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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 host = process.env.HOST || '127.0.0.1'
  6. const port = process.env.PORT || 3001
  7. process.noDeprecation = true
  8. app.set('port', port)
  9. // Import and Set Nuxt.js options
  10. let config = require('./nuxt.config.js')
  11. config.dev = !(process.env.NODE_ENV === 'production')
  12. // 请求代理,dev模式下使用,接口服务器如果支持跨域可去掉
  13. const proxyTable = config.proxyTable
  14. if (proxyTable) {
  15. // 本地代理支持localhost、127.0.0.1等不同地址跨域
  16. app.use((req, res, next) => {
  17. res.header('Access-Control-Allow-Origin', req.get('origin'))
  18. res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE')
  19. res.header('Access-Control-Allow-Headers', 'Content-Type')
  20. res.header('Access-Control-Allow-Credentials', 'true')
  21. next()
  22. })
  23. if (Array.isArray(proxyTable)) {
  24. app.use(proxy(proxyTable, {
  25. target: config.env.baseUrl,
  26. changeOrigin: true,
  27. secure: false,
  28. onProxyRes: (proxyRes) => {
  29. const setCookieHeaders = proxyRes.headers['set-cookie'] || []
  30. const modifiedSetCookieHeaders = setCookieHeaders
  31. .map(str => new cookiejar.Cookie(str))
  32. .map(cookie => {
  33. cookie.path = '/'
  34. return cookie
  35. })
  36. .map(cookie => cookie.toString())
  37. proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
  38. }
  39. }))
  40. } else {
  41. Object.keys(proxyTable).forEach((context) => {
  42. var options = proxyTable[context]
  43. if (typeof options === 'string') {
  44. options = { target: options }
  45. }
  46. app.use(proxy(context, options))
  47. })
  48. }
  49. // axios use proxy url
  50. config.env.proxyUrl = '/'
  51. }
  52. // Init Nuxt.js
  53. const nuxt = new Nuxt(config)
  54. app.use(nuxt.render)
  55. // Build only in dev mode
  56. if (config.dev) {
  57. new Builder(nuxt).build()
  58. .then(listen)
  59. .catch((error) => {
  60. console.error(error)
  61. process.exit(1)
  62. })
  63. }
  64. else {
  65. listen()
  66. }
  67. function listen() {
  68. // Listen the server
  69. app.listen(port, '0.0.0.0')
  70. console.log('Server listening on ' + host + ':' + port)
  71. }
  72. // Listen the server
  73. // app.listen(port)
  74. // eslint-disable-line no-console
  75. // console.log(`Nuxt.js SSR Server listening on ${host} : ${port}, at ${new Date().toLocaleString()} \nusing api ${config.env.baseUrl}`)