使用Angular routeProvider和Express路线
我正在尝试使angular的routeProviderpipe理我的应用程序的所有路线。 我在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来处理这个请求。 因此,它不会被find,因为后端路由是例如/ api / foo。 我如何确保Angular的routeProvider始终pipe理我的请求?
更重要的是应用程序的基本stream程是什么? 当客户端编写一个URL时,应用程序如何知道url是由express js还是由routeProvider处理?
通常,您可以使用主机名和页面URL之间的#
号来区分由angular色应用程序处理的URL与快速URL。
例如:
如果你想从后端请求一个URL,你可以调用: http://host.com/api/foo/
: http://host.com/api/foo/
相反,如果你想从angular应用程序请求一个URL,你会打电话: http://host.com/#/single
: http://host.com/#/single
所以,如果你想调用angular度的应用程序的URL你有添加#
号。
在使用单页面应用程序时,这是一个非常重要的事实。
更新:
看看这个种子项目: https : //github.com/btford/angular-express-seed
它使用与您的项目类似的技术堆栈。 这应该让你更清楚。
前几天我也遇到了同样的问题。 问题在于,即使您调用数据服务器,也会将其redirect到客户端路由,并在$routeProvider
search。
您需要确保在server.js
添加类似以下代码的内容。 这意味着,当以/api
开始呼叫时,它将redirect到服务器端的路由而不是客户端路由。
var api = express.Router(); require('./app/routes')(api); app.use('/api', api);
在你的工厂里,当我们进行下面的调用时,这将会转到服务器端routes.js而不是客户端。
$resource('/api/adduser')