我最近将我的项目从Angular 14升级到15,并开始收到502个错误。
项目与SSR和Nginx合作
所以,我在本地经营
npm run build:ssr
接收服务器和浏览器目录,将它们移动到服务器上,并在服务器上使用配置在docker中运行nginx
server {
listen 443 ssl;
gzip on;
gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 1000;
server_name ${NGINX_HOST};
ssl_certificate /etc/letsencrypt/live/${NGINX_HOST}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${NGINX_HOST}/privkey.pem;
location /api {
proxy_pass http://core;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location / {
alias /frontend/browser/;
index index.html;
try_files $uri @universal;
}
location @universal {
#port defined in your server.js
proxy_pass http://localhost:4000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
使用Angular 14的构建结果,这仍然可以完美地工作。
如果我使用Angular 15的构建结果,如果调用/,我会收到Nginx的502错误(连接到上游时connect()失败)。API仍然运行良好。
奇怪的是,如果我用Angular 14准备的服务器和浏览器目录启动nginx,然后不重新启动,用Angular 15文件夹替换这些目录,一切仍然正常(在我的浏览器中,我可以看到新版本的应用程序)。重新启动后,我再次开始接收502。
我的Angular server.ts文件在升级过程中没有改变,但结果main.js文件却大不相同。
这种问题的根源是什么?
我尝试在不同的组合中更改端口(从4000到8000),因此即使在Angular 14版本上也收到了502错误。
想逃跑
npm run serve:ssr
在本地使用Angular 15,一切都很完美(端口为4000)
检查main.js运行日志,发现错误:
nginx | SyntaxError: Unexpected token '.'
nginx | at wrapSafe (internal/modules/cjs/loader.js:915:16)
nginx | at Module._compile (internal/modules/cjs/loader.js:963:27)
nginx | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
nginx | at Module.load (internal/modules/cjs/loader.js:863:32)
nginx | at Function.Module._load (internal/modules/cjs/loader.js:708:14)
nginx | at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
nginx | at internal/main/run_main_module.js:17:47
但是如何调试,这个'.'在哪里是意外的?
1条答案
按热度按时间niwlg2el1#
问题出在节点版本上。
Angular 15中的Server/main.js依赖于node v16+。
Angular 14中的Server/main.js可以与node v12一起工作。
出于某种原因cmd
在我的dockerfile中安装了node 12和npm 7(基于FROM nginx:stable的docker)。
添加两行
Dockerfile解决了这个问题。