AngularJS RouteProvider和ExpressJS sendfile

时间:2014-05-30 21:21:44

标签: angularjs express routing sendfile route-provider

在我的Angular应用中,我试图在用户点击链接时渲染加载到索引页面的部分内容。之前使用以下代码工作正常:

//app.js in Angular
angular.module('myApp', [
  'ngSanitize',
  'ngRoute',
  ...
]).
config(['$routeProvider', '$locationProvider', '$sceDelegateProvider', function($routeProvider, $locationProvider, $sceDelegateProvider) {
  $routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: 'MainController'});
  $routeProvider.when('/File/:fileID', {templateUrl: 'partials/currentFile.html', controller: 'FileController', controllerAs: 'file'});
  $routeProvider.otherwise({redirectTo: '/view1'});
  $sceDelegateProvider.resourceUrlWhitelist([
    'self',
    'https://www.url.com/**']);
  $locationProvider.html5Mode(true);
}]);

但是当我添加Express时,它不起作用:

var express = require("express");
var logfmt = require("logfmt");
var app = express();

app.use(logfmt.requestLogger());

app.use(express.static(__dirname + '/app'));
app.use('/bower_components', express.static(__dirname + '/bower_components'));

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

如果我只想显示索引页面,这可以正常工作。当我添加以下代码时,它显示纯HTML(部分),但没有CSS或Javascript。

app.get('/partials/currentFile.html', function(req, res) {
    res.render('./app/partials/currentFile.html');
});

如何以与Angular一起使用的方式使用Express渲染部分? 我曾尝试使用Express api查看get(),render和sendfile,但它们对我的情况并没有帮助。其他用户之前在这里问过类似的问题,但是他们通常会涉及另一个Express路由到的文件,我想知道我是否可以在不添加任何额外文件的情况下执行此操作,因为它已经是添加内容的问题包含Express的文件。

currentFile.html不会加载任何CSS或Javascript本身。在我添加Express之前,它是在index.html中加载的部分内容,它加载了所有附加功能。

感谢任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

我没有直接解决问题,但我解决了这个问题。问题是我想将部分渲染到索引页面上。该应用程序的首要目标是单页面应用程序,因此最终,它只是一个重要的页面。

让不同的部分渲染进行测试会很不错,但是似乎没有人知道我要问的是什么,或者我使问题复杂化。无论哪种方式,我通过摆脱所有其他部分并将所有URL请求重定向到单页应用程序找到了解决方法。

config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: 'MainVideoController'});
  $routeProvider.when('/view2', {templateUrl: 'partials/partial2.html', controller: 'MyCtrl2'});
  $routeProvider.when('/file', {templateUrl: 'partials/currentFile.html', controller: 'FileController', controllerAs: 'file'});
  $routeProvider.otherwise({redirectTo: '/file'});
...

请注意,尝试访问domain.com/view1或/ view2时,partials view1和view2不起作用。