Javascript expressJS路由器规划-如何设置有效的路由器

Javascript expressJS路由器规划-如何设置有效的路由器,javascript,html,angularjs,node.js,express,Javascript,Html,Angularjs,Node.js,Express,我意识到这可能是一个相当简单的问题,但请容忍我。我对node/express非常陌生 我的目录结构如下所示: auth index.html pub index.html login.html 这里的想法是,pub中的资源是公开的,但是auth中的资源只有在用户经过身份验证后才可用 然而,在这一点上,我只是试图让这些页面从服务器正常返回。理想情况下,我的路由引擎能够根据一些参数为这些页面提供服务。因此: site.com -> pub/index.html sit

我意识到这可能是一个相当简单的问题,但请容忍我。我对node/express非常陌生

我的目录结构如下所示:

auth
    index.html
pub
    index.html
    login.html
这里的想法是,
pub
中的资源是公开的,但是
auth
中的资源只有在用户经过身份验证后才可用

然而,在这一点上,我只是试图让这些页面从服务器正常返回。理想情况下,我的路由引擎能够根据一些参数为这些页面提供服务。因此:

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");
});
public/
  templates/
    index.html
  stylesheets/
  js/
    jquery.min.js
然而,我很快发现的问题是,这些页面请求的资源与它们在目录结构中的位置有关,所有请求都返回到default index.html。例如,如果我在浏览器index.html加载中键入site.com。以下是index.html的一部分:

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

然后,浏览器自然会对/js/jquery.min.js发出另一个请求,路由器找不到该请求,因此它会再次使用index.html进行响应

我如何设计一个足够智能的路由引擎,根据url找到正确的视图,然后理解它需要提供来自该页面相对于该页面在目录结构中的位置的所有请求?还是有其他处理此类问题的标准方法

更复杂的是,auth/index.html是一个有角度的页面。因此,一旦加载,它将请求与其在目录结构中的位置相关的各种html页面(取决于路由和包含的模板等)


提前谢谢。

这些问题太多了,但我想我至少可以为你指出正确的方向:)

然而,在这一点上,我只是试图让这些页面从服务器正常返回

要使用express执行此操作,您可以使用
express.static
指定一个公共目录,其资产可供web请求使用。例如,如果您有如下目录结构:

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");
});
public/
  templates/
    index.html
  stylesheets/
  js/
    jquery.min.js
在express中,您可以执行以下操作:

app.use(express.static(__dirname + '/public'));
为了将这些文件作为静态资产公开,相对于public dir,例如
http://yourserver.com/templates/index.html

更复杂的是,auth/index.html是一个有角度的页面。因此,一旦加载,它将请求与其在目录结构中的位置相关的所有类型的html页面

我认为您在这里的困惑部分在于了解AngularJS/node.js应用程序中客户端路由和服务器端路由之间的区别

AngularJS是构建单页应用程序(SPA)的框架。这意味着您的浏览器在开始时请求一个HTML文件(例如从服务器上的路由“/”提供的index.HTML)来启动,这将加载一些引导javascript。从那时起,客户端javascript和AJAX调用将处理所有其他调用,以方便呈现额外的HTML、用户交互和导航到应用程序的其他部分。浏览器中的URL将更改,但您会注意到,在导航时不会再重新加载页面。这是可以使用AngularJS构建的客户端路由。如果你已经看过了,就来看看它是如何工作的

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


除了AngularJS教程之外,我还想请您看一看node.js+AngularJS应用程序的端到端示例。

hmm听起来静态资产不是我想要的。我需要路由器理解,当一个页面请求资源时,它会根据自己的位置进行请求。你说的是哪个路由器?在浏览器中运行的路由器或在node.js中运行服务器端的路由器?服务器上的路由器。我认为mean.js肯定会给你一些启发:)在该项目中,下面是一篇文章的相关服务器端和客户端路由。服务器:和客户端: