【问题标题】:Communication between expressjs and angular2expressjs和angular2之间的通信
【发布时间】:2018-02-17 07:48:28
【问题描述】:

我有点困惑。目前我正在创建 MEAN 应用程序。我想知道一起使用 expressJS 和 Angular2 的正确方法是什么?我真的需要后端的视图引擎吗?

目前在我的项目中,路由器正在重定向到 index.hbs(我正在使用车把视图引擎):

 router.get('/', function (req, res, next) {
        res.render('index');
});

然后 index.hbs 正在加载 angular2 :

<my-app>Loading...</my-app>

它正在工作,但我想知道我是否真的需要那个 index.hbs 文件?使用自己的 index.html 创建单独的前端和只负责响应 HTTP 请求(没有视图引擎)的后端会更好吗?

感谢您的澄清

【问题讨论】:

    标签: angular http express mean


    【解决方案1】:

    如果您使用 Angular 作为前端,则不需要像把手或 ejs 这样的视图引擎。

    Angular 用于构建单页应用程序 (SPA)。这意味着,您可以根据请求将整个应用程序从后端交付给客户端。 然后 SPA 只是伸手去后端获取动态数据。

    在像把手这样的视图引擎上,您对每一个页面更改都有一个页面请求。

    【讨论】:

      【解决方案2】:

      你不应该在 express js 中使用 Angular。您可以将两者分开。

      如果你在把手中使用 Angular,那么每次渲染都会再次生成页面,这不是 Angular 的目的。

      您可以将后端与角度分开

      后端你可以实现api 例如:对于一个模块

      var express = require('express');
      var router = express.Router();
      var request = require('request');
      
      router.indexRequest = function (req, res, next) {
          ... your implementation 
          res.status(response.statusCode).send(responseObject);
      }
      module.exports = function (app) {
      app.use('/', router.indexRequest);}
      

      【讨论】:

      • 嗯,这种方法是由 Udemy 在 MEAN 课程中提出的,那么它真的很糟糕吗?这是回购:LINK
      【解决方案3】:

      “我真的需要后端的视图引擎吗?”

      简短的回答是:

      任何严肃的网络应用程序都需要视图引擎。没有视图引擎,就无法实现服务器端渲染。由于服务器端渲染 (SSR) 和单页应用程序 (SPA) 对于良好的 Web 应用程序都是必要的,因此应同时使用视图引擎和前端框架(AngularJS、React 等)。

      例如,如果您想在用户未登录时显示“登录|注册”,并在用户登录时显示用户名信息。没有服务器端渲染,您必须向服务器发送1个Ajax请求并渲染根据 Ajax 响应的页面 - Ajax 请求将需要一些时间,并且相应的页面区域将是空白的,直到收到响应。这当然不是一种用户友好的行为。

      另外,在一页中,如果要在用户角色为X时显示区域A、B、C、D,在用户角色为Y时显示区域B、D、E、F,并显示...服务端渲染,这将是一场噩梦——在收到带有用户角色的 Ajax 响应之前,不会决定最终的页面结构。

      当然,如果你只需要“学习 AngularJS”,忽略视图引擎也是可以的。但是如果你正在开发一个产品,或者想了解一个严肃的 Web 应用程序是什么样的,你真的需要视图引擎。我相信这就是 Udemy 在他们的课程中包含视图引擎的原因。

      如果服务器端渲染与单页应用程序一起使用,为了防止那些服务器端渲染的内容破坏 SPA 应用程序逻辑,您可以在脚本元素中渲染数据。这是一个简单的例子:

      <script type="text/javascript">
        window.userRoles = {= userRolesVar =} // {= =} is view engine tag and would be replaced by corresponding data during render.
      </script>
      

      这样一开始就返回userRoles数据,可以被AngularJS等SPA框架使用。不需要 Ajax 请求,这样的服务器渲染逻辑不会影响任何 SPA 代码。


      @Ma Kobi 对于 AngularJS SPA 应用程序,您说得对,“整个 Web 应用程序是从后端交付到客户端的”。但是,一些服务器呈现的数据(用户角色等)应与应用程序一起发送到客户端。

      此外,使用视图引擎并不意味着您必须为每个页面更改发送 HTTP 请求。 SPA运行后,除了最初的服务器渲染数据(上例)外,与Server Side Rendering无关。


      @Gourav Soni 你可以将 AngularJS 与 Handlebar 一起使用,它不会在每次重新渲染页面时都重新加载页面。前端与后端分离是正确的设计,但这并不意味着视图引擎应该被丢弃。

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 2016-05-01
        • 2017-09-04
        • 2016-12-29
        • 2017-05-04
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 2018-03-23
        相关资源
        最近更新 更多