gpt4 book ai didi

Angular 通用 (SSR) 错误 : Failed to lookup view "index" in views directory

转载 作者:行者123 更新时间:2023-12-02 10:30:15 26 4
gpt4 key购买 nike

我想在 AWS 上部署我的 Angular 通用应用程序。

根据我的理解,我只能将我的应用程序部署在 Elastic beanstalk 上,因为它需要 Web 服务器才能运行。 (这意味着没有 S3 部署)。

当我部署应用程序时,出现以下错误:

Error: Failed to lookup view "index" in views directory "/var/app/current/dist/browser" at Function.render (/var/app/current/server.js:122227:17) at ServerResponse.render (/var/app/current/server.js:131120:7) at /var/app/current/server.js:138:9 at Layer.handle [as handle_request] (/var/app/current/server.js:124007:5) at next (/var/app/current/server.js:123755:13) at Route.dispatch (/var/app/current/server.js:123730:3) at Layer.handle [as handle_request] (/var/app/current/server.js:124007:5) at /var/app/current/server.js:123230:22 at param (/var/app/current/server.js:123303:14) at param (/var/app/current/server.js:123314:14)

这是我到目前为止所做的:

  1. 在我的 Angular 项目中,使用命令 npm run build:ssr 创建生产构建
  2. 创建我的 dist 目录的存档
  3. 在 Elastic Beanstalk 上,使用 node.js 创建一个新应用程序并上传我的存档

还有我的 server.ts 文件:

import 'zone.js/dist/zone-node';
import 'reflect-metadata';
import { enableProdMode } from '@angular/core';
// Express Engine
import { ngExpressEngine } from '@nguniversal/express-engine';
// Import module map for lazy loading
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';

import * as express from 'express';
import { join } from 'path';

// Faster server renders w/ Prod mode (dev mode never needed)
enableProdMode();

// Express server
const app = express();

const PORT = process.env.PORT || 4000;
const DIST_FOLDER = join(process.cwd(), 'dist/browser');

// * NOTE :: leave this as require() since this file is built Dynamically from webpack
const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main');

// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
app.engine('html', ngExpressEngine({
bootstrap: AppServerModuleNgFactory,
providers: [
provideModuleMap(LAZY_MODULE_MAP)
]
}));

app.set('view engine', 'html');
app.set('views', DIST_FOLDER);

// Example Express Rest API endpoints
// app.get('/api/**', (req, res) => { });

// Server static files from /browser
app.get('*.*', express.static(DIST_FOLDER, {
maxAge: '1y'
}));

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

// Start up the Node server
app.listen(PORT, () => {
console.log(`Node Express server listening on http://localhost:${PORT}`);
});

我做错了什么?

感谢您的帮助。

最佳答案

使用 dist 文件夹作为存档,而不是 dist 文件夹的内容。

在您的 Elastic beanstalk 配置中设置以下“节点命令”设置。

node dist/server

这应该允许您使用标准 Angular 开箱即用设置在本地和 AWS EB 上运行。

编辑只是提供更多信息,这应该可以解决问题。正如 @Kartik Chandra 所指出的,问题出在 server.ts 线上文件

const distFolder = join(process.cwd(), 'dist/landing/browser');

在您的 prod env 上部署时,进程将查找 dist 文件夹,因此如果您不复制它,它将失败。

选项是复制整个 dist 文件夹或更改您的 server.ts,但这会破坏您的本地开发。

关于 Angular 通用 (SSR) 错误 : Failed to lookup view "index" in views directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54494963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com