【问题】Nestjs部署问题,求大神帮忙看看

763 阅读3分钟

nestjs部署问题

简单描述一下我的问题,希望有朋友可以帮帮看看,第一次发文章~

描述

我使用nestjs+nuxt开发一个简单的全栈项目,是一个比较小的视频网站,总体开发时间使用的不多,但是部署服务器遇到了比较多的问题,毕竟是第一次没啥经验~,目前还剩下的问题就是关于api接口跨域问题

我的后端分为了web端接口和admin端接口,admin用于后台管理,web服务于前台页面,然后我注册了一个二级域名,为admin.langya11.icu,之后我就将admin服务布置到了这个域名上。并且后台管理系统是使用vue3开发的,并不是nuxt,所以vue3打包之后生成的dist文件我就直接放到admin服务端挂载静态资源了,所以后台管理系统倒是不会出现跨域的问题毕竟都是在统一域名下的

admin

这是admin端请求接口的时候返回的响应头没什么问题,接口也都是正常响应 image.png

web

之后我便又解析了二个二级域名api.langya11.icutps.langya11.icu,用于设置前台接口服务和前端页面展示。

这么做的原因是:

  • nuxt打包之后的动态页面不是单页面,暂时不知道咋挂载静态资源
  • 不挂载静态资源到web服务端的话,只能将web服务api接口设置到一个域名下用于接口请求
  • 我便将api.langya11.icu作为前端请求接口服务,之后就将打包好的nuxt设置到了tps.langya11.icu域名下,跑起来之后运行就报出跨域问题 这个是响应头截图

image.png 下面是我nestjs中web端配置跨域的截图

image.png

分析

没遇到过这种情况所以我简单分析了一下

  • 有可能是nestjs跨域没有问题,是因为设置了域名,所以还需要为nginx配置跨域
  • nestjs配置打包错误
  • 需要前端来处理跨域

另外

除此之外我还有一个问题是关于nestjs环境变量 nestjs环境变量中有两种格式

  • 配置.env文件,之后通过 process.env.<name> 来获取
  • 创建.ts文件将配置设置成一个对象导出使用 我在打包的时候发现我配置的.env环境变量都没有了,都是undefined,然后我就百度了一下,碰到一位朋友是这么说的

nestjs在打包的时候是不会读取.env文件的,所以这个时候可以在build的时候添加一个环境变量

{
    scripts:{
            "build": "cross-env NODE_ENV=production nest build admin;nest build server",
    }
}

需要使用到一个第三方包,帮助我们在运行时添加环境变量

$ yarn add cross-env

之后我们就可以通过以下方式来读取环境变量

const env = {}
if (process.env.NODE_ENV === 'production') {
    env.server_port = 3008
} else {
    env.server_port = 3007
}

export default env

我想询问的就是一般大家都是这么配置打包时候的环境变量还是有另一种方式来配置,我想要一个规范一点的方法,如果说哪种方式都可以我觉得简单一点更好一些。

因为没遇到这种问题身边也没有人会,只能求助网站,希望有朋友可以帮忙解释解释,谢谢!