代码之家  ›  专栏  ›  技术社区  ›  0leg

Angular SSR在产品上“查找视图失败”(Ubuntu,Nginx)

  •  2
  • 0leg  · 技术社区  · 8 年前

    关于使用Express server设置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\u name/dist/browser” 在服务器响应.render(/var/proj\u名称)/服务器.js:53701:7) 在下一个(/var/proj\u name)/服务器.js:46330:13) 在路由调度(/var/proj\u名称)/服务器.js:46305:3) 在层句柄[作为处理请求](/var/proj\u name)/服务器.js:46582:5) at/var/proj\u名称/服务器.js:45805:22 at参数(/var/proj\u name)/服务器.js:45878:14) at参数(/var/proj\u name)/服务器.js:45889:14)

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

    编辑:

    __dirname

    应用程序获取(' .

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

    错误:在视图目录“/browser”中查找视图“索引”失败

    编辑2:

    我设法通过搬家来完成这项工作 browser 文件夹到 ~/dist/browser

    看起来失败的代码在 服务器.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 __目录名 没用。

    所以需要一些方法来确定 res.render('index', { req });

    1 回复  |  直到 8 年前
        1
  •  10
  •   David    8 年前

    使用以下代码

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

    <currentWorkingDirectory>/dist/browser

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

    dist/browser 目录

    所以你应该从 /var/<project_name>/

    推荐文章