server.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. require("@babel/polyfill");
  2. const { Nuxt, Builder } = require('nuxt')
  3. const app = require('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 || 3001
  8. process.noDeprecation = true
  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', req.get('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. next()
  23. })
  24. if (Array.isArray(proxyTable)) {
  25. app.use(proxy(proxyTable, {
  26. target: config.env.baseUrl,
  27. changeOrigin: true,
  28. secure: false,
  29. onProxyRes: (proxyRes) => {
  30. const setCookieHeaders = proxyRes.headers['set-cookie'] || []
  31. const modifiedSetCookieHeaders = setCookieHeaders
  32. .map(str => new cookiejar.Cookie(str))
  33. .map(cookie => {
  34. cookie.path = '/'
  35. return cookie
  36. })
  37. .map(cookie => cookie.toString())
  38. proxyRes.headers['set-cookie'] = modifiedSetCookieHeaders
  39. }
  40. }))
  41. } else {
  42. Object.keys(proxyTable).forEach((context) => {
  43. var options = proxyTable[context]
  44. if (typeof options === 'string') {
  45. options = { target: options }
  46. }
  47. app.use(proxy(context, options))
  48. })
  49. }
  50. // axios use proxy url
  51. config.env.proxyUrl = '/'
  52. }
  53. // Init Nuxt.js
  54. const nuxt = new Nuxt(config)
  55. app.use(nuxt.render)
  56. // Build only in dev mode
  57. if (config.dev) {
  58. new Builder(nuxt).build()
  59. .then(listen)
  60. .catch((error) => {
  61. console.error(error)
  62. process.exit(1)
  63. })
  64. }
  65. else {
  66. listen()
  67. }
  68. function listen() {
  69. // Listen the server
  70. app.listen(port, '0.0.0.0')
  71. console.log('Server listening on ' + host + ':' + port)
  72. }
  73. // Listen the server
  74. // app.listen(port)
  75. // eslint-disable-line no-console
  76. // console.log(`Nuxt.js SSR Server listening on ${host} : ${port}, at ${new Date().toLocaleString()} \nusing api ${config.env.baseUrl}`)