expressJS路由器规划 – 如何设置一个有效的路由器

我意识到这可能是一个相当简单的问题,但忍受着我。 我对node / express真的很陌生。

我的目录结构如下所示:

auth index.html pub index.html login.html 

这里的想法是, pub中的资源是公开可用的,但auth中的资源只有在用户被authentication之后才可用。

但是,在这一点上,我只是试图让这些页面从服务器正确地回来。 理想情况下,我的路由引擎将能够基于某些参数提供这些页面。 所以:

 site.com -> pub/index.html site.com/login/ -> pub/login.html site.com/dashboard/ -> auth/index.html 

我尝试了这样的事情:

 router.get('/dashboard/', function(req, res, next) { res.sendFile(__dirname + "/src/auth/index.html"); }); router.get('/login/', function(req, res, next) { res.sendFile(__dirname + "/src/pub/login.html"); }); router.get('*', function(req, res, next) { res.sendFile(__dirname + "/src/pub/index.html"); }); 

然而,我很快发现的问题是这些页面正在请求相对于它们在目录结构中的位置的资源,并且所有请求都被返回了默认的index.html。 所以,例如,如果我在浏览器index.html加载中键入site.com。 这是index.html的一部分:

 <script src="js/jquery.min.js"></script> 

当然,浏览器会再次请求/js/jquery.min.js,这是路由器无法find的,因此它会再次以index.html作为响应。

我该如何devise一个足够智能的路由引擎,以便根据urlfind正确的视图,然后明白它需要处理来自该页面相对于该目录结构中该页面位置的所有请求? 还是有另一种处理这类问题的标准方法?

使问题复杂化,auth / index.html是一个angular度页面。 所以,一旦它加载它将要求各种相对于其在目录结构中的位置的HTML页面(取决于路线和包括的模板等)

提前致谢。

这些是很多问题,但我认为我可以至less让你指出正确的方向:)

但是,在这一点上,我只是试图让这些页面从服务器正确地回来。

要用express来做到这一点,可以使用express.static来指定一个公共目录,其资产可用于Web请求。 例如,如果你有一个这样的目录结构:

 public/ templates/ index.html stylesheets/ js/ jquery.min.js 

明示,你会这样做:

 app.use(express.static(__dirname + '/public')); 

为了公开这些文件作为静态资产,相对于公共目录,例如http://yourserver.com/templates/index.html

使问题复杂化,auth / index.html是一个angular度页面。 所以,一旦它加载它将要求各种相对于其在目录结构中的位置的HTML页面

我认为你的困惑的一部分是在AngularJS / node.js应用程序中了解客户端路由和服务器端路由的区别。

AngularJS是一个构build单页面应用程序(SPA)的框架。 这意味着你的浏览器在开始时请求一个HTML文件(例如,从服务器上的“/”path提供的index.html)来启动一些东西,这会加载一些自举JavaScript。 从那时起,客户端的JavaScript和AJAX调用将处理所有其余的事情,以方便呈现额外的HTML,用户交互和导航到您的应用程序的其他部分。 浏览器中的url将会发生变化,但是您会注意到在浏览时不会再发生页面重新加载。 这是您可以使用AngularJS构build的客户端路由。 如果您已经看过AngularJS教程 , 第7步将介绍这是如何工作的。

您的服务器端路由通常不涉及此页面导航。 相反,你的服务器应该为AngularJS客户端提供一个API,将AJAX调用来创build,读取,更新,删除(CRUD)应用程序数据。 对于login例如,你可以有一个服务器端/api/login路由,不返回一个HTML页面,而是通过POST请求接受用户名和密码,build立一些会话状态,然后返回结果进行处理与客户端。

除了AngularJS教程之外,我还会邀请您参考一下mean.js ,了解node.js + angularJS应用程序的结尾示例。