2013-11-08 2 views
1

Я просмотрел интернет для кого-то с аналогичной проблемой, но до сих пор нет решений. Сравнивая мое приложение с Angular-Express-seed, Angular-Express-Master и любой другой популярный пример, ничего, похоже, не сломано, но он просто не работает. У кого-нибудь есть идеи, почему это может быть?Angular.js и Express: Маршрутизация не работает

Постараюсь запасных деталей, не снимая, что может быть проблематичным бит кода:

/app.js

// All environments 
app.set('views', __dirname + '/views'); 
app.set('port', process.env.PORT || 3000); 
app.engine('.html', require('ejs').renderFile); 
app.set('view engine', 'html'); 
app.set("view options", { layout: false }); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(express.cookieParser()); 
app.use(express.session(
    { secret: 'spunkydelicious', 
     cookie : { 
     maxAge: (3600000*24*7) // 1 week 
     } 
    } 
)); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(require('express-jquery')('/jquery.js')); 
app.use(express.static(path.join(__dirname, '/public'))); 
app.use(app.router); 

... 

app.get('/', index.index); 
app.get('/partials/:name', index.partials); 
app.get('*', index.index); 

, где «индекс» из index.index, индекс .partials и т.д. соответствует этому:

/app/controllers/index.js

exports.index = function(req, res){ 
    res.render('index'); 

}; 

exports.partials = function(req, res) { 
    var name = req.params.name; 
    console.log('Hurah!'); 
    res.render('partials/' + name); 
}; 

/public/javascripts/app.js

'использовать строгий';

// Объявляем модуль приложения уровня, который зависит от фильтров, а также услуги

angular.module('emit', []). 
config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) { 
    $routeProvider.when('/', { 
     templateURL:'partials/test', 
     controller: AppCtrl 
    }). 
    otherwise({ 
     redirectTo: '/' 
    }); 

    $locationProvider.html5Mode(true); 
}]); 

/public/javascripts/controllers.js

'use strict'; 

/* Controllers */ 

function AppCtrl($scope) { 
    console.log('123'); 
} 

/views/index.html

<!DOCTYPE html> 
<html ng-app="emit"> 
    <head> 
    <base href="/"> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    </head> 
    <body> 

    <div ng-view></div> 

    <!-- Plugins --> 
    <script src="/javascripts/vendor/angular/angular.js"></script> 

    <!-- Angular --> 
    <script src="/javascripts/app.js"></script> 
    <script src="/javascripts/controllers.js"></script> 

    <!-- Other scripts --> 
    **strong text** <script src="/javascripts/script.js"></script> 
    </body> 
</html> 

/views/partials/test.html

<div class="">Yay!</div> 

Прощения длина кода, я просто не могу взломать то, что я делаю неправильно. Никакие ошибки не регистрируются сервером клиентской консоли. Какие шаги отладки я мог бы предпринять?

+0

Я думаю, что ваша проблема заключается в местоположении partials/test.html. По умолчанию Angular будет искать его под «root», который в вашем случае будет находиться под PUBLIC/partials/test.html не под VIEWS/partials/test.html –

+0

Да, попробуйте что-то вроде public/views/partials и public/views /text.html – enducat

+0

Да, я пробовал обманывать это, но никакого результата. Сравнив мое приложение с [Угловое семя] (https://github.com/btford/angular-express-seed), он должен просто прекратить загрузку представлений с сервера, поскольку они загружают их с помощью рендеринга Jade. Но я действительно думаю, что вы на что-то, в том, что явные и угловые системы маршрутизации, похоже, конкурируют. –

ответ

5

После очень длинной и запутанной сессии отладки я понял это ... Удивительно, но ошибка в templateURL - это должно быть templateUrl.

+0

НЕВЕРОЯТНО. Надеюсь, ваше открытие поможет людям на долгие века. Спасибо. –

Смежные вопросы