Angular SSR'无法在生产中查找视图'(Ubuntu,Nginx)

问题描述 投票:2回答:1

关注使用Express服务器设置SSR的官方Angular教程:https://angular.io/guide/universal#configure-for-universal

本教程将设置如下路径:

...
const DIST_FOLDER = join(process.cwd(), 'dist');
...
app.set('views', join(DIST_FOLDER, 'browser'));

这在本地服务器上运行良好。

但是一旦部署在服务器上(由Nginx提供支持),就会出现错误:

错误:无法在ServerResponse.render的Function.render(/var/proj_name/server.js:44670:17)的视图目录“/ home / user_name / dist / browser”中查找视图“index”(/ var / proj_name / server.js:53701:7)在/var/proj_name/server.js:121:9 at Layer.handle [as handle_request](/ var /proj_name / server.js:46582:5)at next(/ var / proj_name /server.js:46330:13)在Route.dispatch(/var/proj_name/server.js:46305:3)的Layer.handle [as handle_request](/var/proj_name/server.js:46582:5)at at / var /proj_name/server.js:45805:22 at param(/var/proj_name/server.js:45878:14)at param(/var/proj_name/server.js:45889:14)

如何正确处理这个问题,以便应用程序在本地(开发)和生产服务器上正常工作?

编辑:

也尝试使用__dirname代替:

app.get('。',express.static(join(__ dirname,'browser')));

但是这在本地和生产服务器上都失败了:

错误:无法在视图目录“/ browser”中查找视图“index”

Aaditi:

我已经设法通过将browser文件夹移动到~/dist/browser来完成这项工作。但我不希望应用程序以这种方式工作。

看起来失败的代码在server.ts中:

// All regular routes use the Universal engine
app.get('*', (req, res) => {
  res.render('index', { req });
});

当在本地运行时,const DIST_FOLDER = join(process.cwd(), 'dist');返回正确的输出。但是当在真实服务器(Ubuntu,Nginx)上运行时,它会得到:/home/<user_name>/dist/browser。使用__dirname没有帮助。

所以需要一些方法来确保res.render('index', { req });获得正确的资源。

angular express nginx angular-universal ssr
1个回答
7
投票

使用以下代码

const DIST_FOLDER = join(process.cwd(), 'dist');
app.set('views', join(DIST_FOLDER, 'browser'));

表示视图引擎将在此目录中查找视图:<currentWorkingDirectory>/dist/browser

当前工作目录对应于启动节点进程的目录。

因此,如果您希望代码以相同的方式为本地和prod环境(使用nginx)工作,则需要确保从哪个起始节点的目录始终是dist/browser目录的父目录

所以你应该从/var/<project_name>/运行node(或pm2)

© www.soinside.com 2019 - 2024. All rights reserved.