Angularjs 如何定义不包括静态资源的默认路由

Angularjs 如何定义不包括静态资源的默认路由,angularjs,node.js,express,routes,singlepage,Angularjs,Node.js,Express,Routes,Singlepage,我想使用express.js为单页应用程序angular core定义一个默认路由。当请求静态文件而路由中不存在该文件时,就会出现问题。在此场景中,将返回默认页面内容,而不是404状态Not Found。示例代码: var path = require('path'); var express = require('express'); var app = express(); var router = express.Router(); router.use(express.static(pa

我想使用express.js为单页应用程序angular core定义一个默认路由。当请求静态文件而路由中不存在该文件时,就会出现问题。在此场景中,将返回默认页面内容,而不是404状态Not Found。示例代码:

var path = require('path');
var express = require('express');
var app = express();
var router = express.Router();
router.use(express.static(path.join(__dirname, '/scripts')));
router.get('*', function(request, response) {
     response.sendFile(path.join(__dirname, 'views/index.html'));
});
app.use(router);
app.listen(80);

排除静态文件的默认路由并正确处理404状态是否是一个好的解决方案?文件URL的正则表达式而不是通配符是一种好方法吗?

您需要能够判断是否正在请求脚本文件。问题是您的目录结构如下:

/root
  /scripts
    foo.js
    bar.js
<script src="/foo.js"></script>
/root
  /static
    /scripts
      foo.js
      bar.js
您可以设置静态处理程序,以允许用户加载如下脚本:

/root
  /scripts
    foo.js
    bar.js
<script src="/foo.js"></script>
/root
  /static
    /scripts
      foo.js
      bar.js
。。。然后设置静态处理程序:

router.use(express.static(path.join(__dirname, '/static')));
。。。然后更新脚本标记:

<script src="/scripts/foo.js"></script>
更新:最好将所有静态资产保存在静态文件夹中。您应该按类型对资产进行分组:脚本、css、字体、图像等。然后,如果URL包含/scripts/、/css/、/img/、或/font/,您可以将catch-all处理程序更新为类似的内容,这将是404:


好的,谢谢!在这个场景中,当我有20个静态处理程序时会发生什么?我是否应该创建另一个单亲目录,将所有静态文件夹放入其中,并在默认路径中验证它?我更新了我的答案以解决您的评论。20个静态处理程序有点雄心勃勃;-你真的只需要一个,把你的资产组合在一起。太好了!我可以使用多个静态处理程序,因为我的应用程序是可插入的。换句话说,应用程序中的每个插件都可以有自己的静态资源。