使用Angular routeProvider和Express路由

时间:2015-12-01 10:09:47

标签: angularjs node.js rest http express

我正在尝试使用angular的routeProvider来管理我应用的所有路线。我在angular(客户端)的app.js文件中相应地定义了我的路由:

(function(){

var app = angular.module("Crowdsourcing", ["ngRoute"]);

app.config(function($routeProvider){
    $routeProvider
        .when("/single/:street/:buildingNumber/:apartmentNumber", {
            templateUrl: "/views/single.html'",
            controller: "ListingCtrl"
        })
        .otherwise({redirectTo:"/"});
});
}());

然而,当在浏览器上写一个URL(例如/ single)时,我的后端express / node api试图处理该请求。因此,找不到它,因为后端路由例如是/ api / foo。如何确保Angular的routeProvider始终管理我的请求?

更重要的是应用程序的基本流程是什么?当客户端编写URL时,应用程序如何知道URL是由快递js还是由routeProvider处理?

2 个答案:

答案 0 :(得分:1)

通常,您可以通过在主机名和网页网址之间使用#符号来区分角度应用处理的网址与快速网址。

例如:

如果您想从后端请求网址,请致电: http://host.com/api/foo/

相反,如果您想要从角度应用程序请求URL,您可以调用:http://host.com/#/single

因此,如果您想调用角度应用网址,请添加#符号。

在使用单页应用程序时,您需要牢记这一点非常重要。

<强>更新

看看这个种子项目:https://github.com/btford/angular-express-seed

它使用与您的项目类似的技术堆栈。这应该让你更清楚。

答案 1 :(得分:1)

前几天我遇到过同样的问题。问题是,即使您对数据进行服务器调用,它也会将其重定向到客户端路由并在$routeProvider中进行搜索。

您需要确保在server.js中添加类似以下代码的内容。 这意味着当有/api的呼叫时,它会将其重定向到服务器端的路由,而不是客户端路由。

var api = express.Router();
require('./app/routes')(api);
app.use('/api', api);

在我们拨打电话的工厂中,这将转到服务器端routes.js而不是客户端。

$resource('/api/adduser')