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



遵循官方的 Angular 教程,介绍如何使用 Express 服务器设置 SSR: https://angular.io/guide/universal#configure-for-universal

本教程将设置如下路径:

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

这在本地服务器上效果很好。

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

错误:无法在视图目录中查找视图"索引" "/home/user_name/dist/browser" at Function.render (/var/proj_name/server.js:44670:17( at ServerResponse.render (/var/proj_name/server.js:53701:7( at/var/proj_name/server.js:121:9 at Layer.handle [as handle_request] (/var/proj_name/server.js:46582:5( 在下一个 (/var/proj_name/server.js:46330:13( at Route.dispatch (/var/proj_name/server.js:46305:3( at Layer.handle [as handle_request] (/var/proj_name/server.js:46582:5( 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"中查找视图"索引">

编辑2:

我设法通过将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 });获得正确的资源。

使用以下一段代码

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

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

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

因此,如果您希望代码在本地和生产环境中以相同的方式工作(使用 nginx(,则需要确保从中启动节点的目录始终是dist/browser目录的父目录

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

最新更新