如何将 ExpressJS 服务器与 Angular2 集成

Posted

技术标签:

【中文标题】如何将 ExpressJS 服务器与 Angular2 集成【英文标题】:How to integrate ExpressJS server with Angular2 【发布时间】:2017-03-03 01:32:51 【问题描述】:

我尝试使用 NodeJS (Express) 作为服务器创建一个 angular2 应用程序。 问题是存在冲突,因为 Express 尝试使用自己的模板引擎并路由请求,而 angular 还使用路由和 index.html 作为入口点。

如何整合两者?

【问题讨论】:

一个 angular2 项目设置并运行,但我担心如果我创建 Express 服务器它会覆盖文件结构。我找不到一个像样的参考如何解决它 这能解决吗? ***.com/a/34864585/2112228 【参考方案1】:

通常,NodeJS/Express 将用于提供具有 Angular 可以使用的端点的 API。 NodeJS 只是一个后端,Angular 只是一个前端。

虽然 Angular 可以从 NodeJS 服务器提供服务,但这是一种资源浪费,因为大多数 Angular 站点都是完全静态的。也就是说,它们是可以从 S3 或 FTP 提供的 javascript、CSS 和图像,并通过服务获取所有动态内容(来自 twitter 的推文、来自 S3 存储桶的图像、来自自定义 NodeJS 后端的数据等)。换句话说,不需要动态的服务器端渲染。

我强烈建议保持这种方法。将您的 Angular 应用程序托管在像 S3 这样的静态存储主机上,并使用 NodeJS 创建一个 REST API,您的应用程序可以通过 Angular 服务进行通信。发送 GET 请求以获取 JSON 数据。获取生成的 JSON 数据并使用它来填充您的应用程序。发送POSTPUTDELETE 请求以添加或操作数据(假设您计划拥有一个后端数据库)。

这通常在您的域中表示的方式是让 http://yourdomain.com 指向您的 Angular 应用程序。然后,您的 Angular 应用程序将调用指向您的 Node API 的 http://yourdomain.com/api/http://api.yourdomain.com。您可以将您的 DNS 配置为执行上述任一操作而无需您的代码中不需要物理子目录。

【讨论】:

但是我必须拆分他们的位置吗?如果我希望它们从同一个父目录/项目运行怎么办? 您可以将它们托管在不同的地方,但配置您的 DNS 以便它们从看似相同的域托管。我强烈建议不要尝试在单个代码库中混合后端和前端代码。 我已更新答案以包含有关典型托管设置的更多信息。 感谢您的明确解释 - 我很高兴我没有遇到使用 Angular/Express 解决冲突的问题。在任何情况下,是否建议使用物理服务器? 实现取决于您,但一个好的解决方案是将您的 Angular 应用程序托管在 S3 上,并将您的 NodeJS API 托管在像 Heroku 这样的服务上。然后只需在两者前面配置您的 DNS。

以上是关于如何将 ExpressJS 服务器与 Angular2 集成的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nodejs 模块 http2 将 http2 与 ExpressJS 集成?

将 Google Cloud Platform 的错误报告与 ExpressJS 一起使用

expressjs设置tls连接https nginx服务器请求

AngularJS、Node.js、ExpressJS 应用程序集成问题

NodeJS ExpressJS - 如何记录生产服务器的错误?

nodejs 与 expressjs 和 SSL p7b 证书