非HTML资源的角度后端路由

时间:2015-02-01 20:41:27

标签: javascript angularjs node.js express

我正在尝试使用Angular中的ngRoute设置路由。我know对后端的GET请求应该返回index.html,然后index.html加载Angular,构造相应的页面。

但我遇到的问题是app.js的GET请求正在返回index.html。当我查看其他人的代码和我的旧代码时,他们基本上和我有相同的路线:

app.get('/*', function(req, res) {
    res.sendFile(__dirname + '/index.html');
});

例如,this article似乎正在解决我的情况,但我不知道它如何处理我对非HTML资源的问题。

您应该如何处理非HTML资源的GET请求?

编辑:

我的文件结构:

- algorithmsAssignments
  - node_modules
  - percolation
    - grid.js
    - main.css
    - main.html
    - main.js
    - uf.js
  - randomizedQueuesAndDequeues
    - main.css
    - main.html
    - main.js
  - app.js
  - home.html
  - index.html
  - server.js

server.js

var express = require('express');
var app = express();
app.get('/*', function(req, res) {
    res.sendFile(__dirname + '/index.html');
});
app.listen(3000);
console.log('listening on port 3000...');
app.use(express.static(__dirname));

2 个答案:

答案 0 :(得分:0)

虽然我不知道您考虑过哪种类型的非HTML资源,但您可以使用快速路由返回JSON,如下所示:

res.send({ foo: 'bar' });

或除了返回JSON之外的状态代码

res.status(400).send({ Message: "not found" });

不确定它是否与您正在处理的内容相关,但您当然可以在Angular中加载非html资源,而无需触及Express或配置任何路由:

$http.get('/myresources/configSettings.json').success(function (data) {
   if (data.foo === 'bar') {
      console.log('this works');
   }
}).error(function () {
   console.log('Error: failed to find your config settings.');
});

答案 1 :(得分:0)

不要以这种方式提供静态文件。而是将所有静态文件放在一个目录中(例如' public')并添加middleware

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

我建议仅使用自定义路由来提供动态文件。