【问题标题】:Does the Angular route url has to be the same as the node express route to 'talk' to the backend?Angular 路由 url 是否必须与节点快速路由相同才能与后端“对话”?
【发布时间】:2016-09-14 19:47:18
【问题描述】:

角度: 我的 Angular 路由中的 url 是 '/auth/login',后端的路由是 '/login' - 一切正常,但我只是想知道为什么两个 url 不同 - 前端如何与后端对话? 或者它是否有效,因为两个 url 都有 /login (所以无论之前出现什么 - 在这种情况下: /auth 无关紧要)? 谢谢。

....
auth.login = function(email, password) {
        return $http.post('/auth/login', user)
        .then(function(response){
            $rootScope.currentUser = response.data;
        })
  }
....

后端:

app.post('/auth/login', function (req, res, next) {  
   User.findOne({
    where: req.body
  })
  .then(function (user) {
      if (!user) {
      res.sendStatus(401);
    } else {
      req.session.userId = user.id;
      res.sendStatus(204);
    }
  })
  .catch(console.error)

});

【问题讨论】:

    标签: angularjs express post routing


    【解决方案1】:

    它之所以有效,是因为一旦加载了 Angular,对客户端 url 的任何更改都不会导致浏览器发出服务器请求。浏览器向服务器发出的唯一请求是针对 index.html + 它使用的任何资源(js、css、图像)。

    有关其工作原理的更多信息,请参阅$location guideHashbang 和 HTML5 模式部分。

    仅当您从 Angular 发出 $http 请求时,客户端 + 服务器 API 之间的链接才会发生。使用 $http 请求,您可以指定要请求的 API 端点的确切 URL。

    前端和后端/API URL 不需要有任何共同点。唯一需要注意的是,您用于 $http 请求的 URL 指向后端 API 的有效 URL。

    所有这一切的唯一例外是,如果您对应用程序进行了编码以执行某种魔术,您可以使用当前浏览器 URL 来决定要访问哪个 API 端点。这是一种非常罕见的情况,如果您的应用正在执行类似的操作,您肯定会知道(因为您必须自定义构建该功能!)

    希望这可以为您解决问题。

    【讨论】:

    • 当你说前端和后端 URL 不必有任何共同点时,我不明白你的意思 - 假设我向 /allusers 发出 $http 请求,而在我的后端我有一条路线来获得我想要的东西(在这种情况下是所有用户),但 url 可以说 /user - 那么请求将永远不会“到达正确的端点?!就像在我的情况下一样 - http 请求 /auth/login 如何最终与 /login 交谈?
    • angular 处理 /login URL 以使其加载状态(由您使用的任何路由器定义 - 最常见的是 ngRoute 或 ui-router)。该状态导致控制器加载(路由/状态控制器或某些嵌套指令控制器)。该控制器向 /auth/login API 端点发出异步 $http 请求。
    • 尽可能简单地说 - /login 前端 URL 向 API 端点 /auth/login 发出 $http 请求 - 但实际上,any 前端URL 可以向 /auth/login 发出相同的 $http 请求
    • Angular 前端可以从其应用程序的任何位置向任何后端 API 端点发出 $http 请求。您需要将前端和后端视为单独的应用程序,它们只是通过 API 请求相互通信。
    • 我不明白是否有任何前端 url 可以向 /auth/login 发出请求 - 连接在哪里?假设有 10 个“api 端点”/auth/login、/auth/signup、/shop、/users 等。如果我的 $http 请求 URL 是例如“/people”(因为你说它不必具有相同的 url) 请求将如何转到 /auth/login 而不是另一个??
    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多