Express和AngularJS – 尝试打开主页时,网页会冻结

我会尽可能详细地解释这个问题。

我试图用Express来使用AngularJS,并且遇到了麻烦。 我希望显示HTML文件(不使用模板引擎)。 这些HTML文件将有AngularJS指令。
但是,我无法显示一个简单的HTML文件本身!

目录结构如下:

Root ---->public -------->js ------------>app.js ------------>controllers.js ---->views -------->index.html -------->partials ------------>test.html ---->app.js 

public/js/app.js的内容是:

 angular.module('myApp', []). config(['$routeProvider', function($routeProvider) { $routeProvider.when('/', {templateUrl: 'partials/test.html', controller: IndexCtrl}); $routeProvider.otherwise({redirectTo: '/'}); }]); 

public/js/controllers/js是:

 function IndexCtrl() { } 

views/index.html body标签的内容是:

 <div ng-view></div> 

而已。 期望的是,AngularJS将用test.html – views/partials/test.html代替上面的视图,其内容是:

 This is the test page! 

封闭在段落标记内。 而已!

最后, ROOT/app.js文件的内容是:

 var express = require('express'); var app = module.exports = express(); // Configuration app.configure(function(){ app.set('views', __dirname + '/views'); app.engine('html', require('ejs').renderFile); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.static(__dirname + '/public')); app.use(app.router); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); // routes app.get('/', function(request, response) { response.render('index.html'); }); // Start server app.listen(3000, function(){ console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env); }); 

现在,当我在根文件夹中执行$node app.js时,服务器启动时没有任何错误。 但是,如果我在浏览器中访问localhost:3000 ,则URL将变为localhost:3000/#/ ,页面将卡住/冻结。 我甚至无法检查Chrome中的控制台日志!
这是我面临的问题。 任何线索我做错了什么?

最后算出来 – 经过很多激烈的拉发时刻!
页面冻结的原因是因为(一步一步解释):

  1. 用户启动localhost:3000
  2. 这要求快递服务器的'/'
  3. 快递呈现index.html
  4. AngularJS将呈现模板“partials / test.html”。
  5. 在这里,我正在猜测 – AngularJS已经为页面“partials / test.html”做了一个HTTP请求。
  6. 不过,你可以看到express或者说app.js没有这个GET请求的处理器。 也就是说,下面的代码丢失了:

    app.get('partials /:name',function(request,response){
    var name = request.params.name;
    response.render('partials /'+ name);
    });

在ROOT目录的app.js里面。 一旦我添加了这个代码,页面按预期呈现。

尝试遵循这个工作小提琴的devise模式。 代码如下所示。 你可以用templateUrlreplace模板选项,它应该仍然工作正常。

 var app = angular.module('app', []); app.config(['$routeProvider', function($routeProvider){ $routeProvider.when('/', {template: '<p>Index page</p>', controller: 'IndexCtrl'}); $routeProvider.otherwise({redirect:'/'}); }]); app.controller('IndexCtrl', function(){ });