使用angular.js和express表示路由错误

时间:2013-06-08 12:05:52

标签: javascript angularjs express

我正在尝试使用angular.js在/ parent root周围进行路由,如果我正在使用锚链接等,则可以正常工作(也就是说纯粹来自angular处理的路由。例如,一个href为'/ parent /的链接但是,当我在url栏中输入它时或者当它已经在那个位置时刷新它时,它会生成一个错误,因为后端路由还没有完成。

因此我在express中尝试了一个catchall路由('/ parent / *'),但这导致了我的所有js和css都没有被读取的错误。有谁知道如何解决这个问题?

我的静态文件目录

public
  -> javascripts
      -> app.js
      -> angular.js
  -> stylesheets
  -> images

错误:

Resource interpreted as Script but transferred with MIME type text/html: "http://localhost:3000/parent/javascripts/jquery.js". home:1
Resource interpreted as Script but transferred with MIME type text/html: "http://localhost:3000/parent/javascripts/angular.js". home:1
Resource interpreted as Script but transferred with MIME type text/html: "http://localhost:3000/parent/javascripts/main.js". home:1
Uncaught SyntaxError: Unexpected token < jquery.js:1
Uncaught SyntaxError: Unexpected token < angular.js:1
Uncaught SyntaxError: Unexpected token < 

快速

app.get('/parent', function(req, res) {
  res.render('main')
});
app.get('/parent/*', function(req, res) {
  res.render('main')
});

Angular routing(我在视图中声明控制器)

var app = angular.module('app', []).config(function($routeProvider, $locationProvider) {
  $locationProvider.html5Mode(true);
  $routeProvider.when('/parent/login', 
    {
      templateUrl: '../templates/login.html'
    }).
    when('/parent/home', 
    {
      templateUrl: '../templates/home.html'
    }).
    otherwise(
    {
      redirectTo: '/parent'
    })
})

2 个答案:

答案 0 :(得分:16)

这是新引入的“行为改变”(或错误)。

尝试使用基本标记:

<base href="/" />

答案 1 :(得分:6)

您也可以通过/parent为您的JS / CSS服务:

... http://localhost:3000/parent/javascripts/jquery.js
                         ^^^^^^^

因此,如果您在之前声明路由,则声明express.static中间件,您的catch-all路由将处理所有JS / CSS请求。

您应该使用与此类似的设置:

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

// ...followed by your catch-all route (only one needed)
app.get('/parent*', function(req, res) {
  res.render('main')
});