3

当我尝试创建动态路由时,我收到了几个“意外令牌 <”错误。正常路线工作正常。因此,如果我设置以下路线:

.when('/user',{
    templateUrl: 'views/user/new', 
    controller: "addUserCtrl"
  })

请求到达服务器并被我的 express catch all route 处理程序捕获,然后 angular 启动并请求 express 的 api 路由、api/用户、绑定数据、控制器和模板,我看到了一个不错的页面。一切正常。没有错误。

如果我尝试创建动态路由或更深入的路由,当我尝试请求该路由时,我会收到意外的令牌错误:

.when('/user/:id',{
    templateUrl: 'views/user/new', 
    controller: "addUserCtrl"
  })

例如,当我请求 /user/3 时,我收到错误,并且 addUserCtrl 永远不会被调用。任何可能导致这种情况的想法。

.when('/user/show,{
    templateUrl: 'views/user/new', 
    controller: "addUserCtrl"
  })

请求 /user/show 也会抛出错误。在控制台中,错误显示在我在索引正文中加载的所有角度文件(angular.js、App.js、services.js、controllers.js、filters.js、directives.js)的请求旁边.html。

我注意到每当我在路由中添加多个斜杠时都会发生此问题。如果我尝试 /user/show,我可以看到以下请求:

   /user/show

   syntax errors for the below:
   /user/js/App.js
   /user/js/lib/angular/angular.js
   /user/js/filters.js
   /user/js/controllers.js'
   /user/js/services.js
   /user/js/directives.js

如果我尝试 /abc/def,我将收到以下请求:

   /abc/def

    syntax errors for the below:
   /abc/js/App.js
   /abc/js/lib/angular/angular.js
   /abc/js/filters.js
   /abc/js/controllers.js'
   /abc/js/services.js
   /abc/js/directives.js
4

4 回答 4

6

我遇到了同样的问题,正如 atentaten 描述的那样,问题是由 js 文件的相对路径引起的。但是,它与 Express 无关。它也可能是由来自 html 文件头部的脚本标签的相对包含路径引起的。所以,为了澄清,我改变了我的HTML:

<script src="bower_components/angular/angular.js"></script>

至:

<script src="/bower_components/angular/angular.js"></script>
于 2014-11-30T17:51:56.133 回答
3

显然这不是一个真正的角度问题,而是一个明确的问题。

问题是我的 index.jade 中包含的角度 js 中缺少开头的斜线:

script(src='js/lib/angular/angular.js')
script(src='js/App.js')
script(src='js/services.js')
script(src='js/controllers.js')
script(src='js/filters.js')
script(src='js/directives.js')

我将它们更改为:

script(src='/js/lib/angular/angular.js')
script(src='/js/App.js')
script(src='/js/services.js')
script(src='/js/controllers.js')
script(src='/js/filters.js')
script(src='/js/directives.js')

错误消失了。尽管 js 加载时没有斜杠,但它仍然会导致 express 出现问题,创建语法错误,这可能会破坏角度,但我不确定具体原因。

于 2013-02-06T03:26:26.790 回答
1

templateUrl 必须是绝对的,否则如果 url 中有多个斜杠/深度级别,Express 会阻塞:

.when('/user/show,{
  templateUrl: '/views/user/new', /* add slash */
  controller: "addUserCtrl"
})
于 2013-03-06T19:39:01.607 回答
0

这发生在 angularJS 应用程序中的 ui-router 动态路由上。我有同样的错误。通过改变路径解决

<script src="app/components/services/campaign.services.js"></script>

<script src="/app/components/services/campaign.services.js"></script>

但在我的情况下 index.html 文件路径是由 gulp 任务gulp-inject生成的,所以我更改了 gulp-inject 的配置,例如

inject: { addRootSlash: true }

它对我有用:)

于 2015-10-14T12:42:24.610 回答