2016-03-17 3 views
0

Я установил пакет express-generator с номером npm и использовал команду express myApp для создания моего приложения. У меня возникли проблемы с работой с маршрутами. Я понимаю, что есть экспресс-маршруты, которые используются для бэкэнда, и Угловые маршруты, которые предназначены для интерфейса. Проблема: ни один из моих маршрутов, кроме индекса, не является рендерингом. Так что моя структура файла:Как правильно обрабатывать угловые маршруты с использованием рамки Express?

/myApp 
    /bin 
    /node_modules 
    /public 
    /images 
    /js 
     /controllers 
     app.js 
    /stylesheets 
    /routes 
    index.js 
    /views 
    error.jade 
    index.jade 
    layout.jade 
    about.jade 
    app.js 
    package.json 

Мои app.js:

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 


module.exports = app; 

Мои routes/index.js:

var express = require('express'); 
var router = express.Router(); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'myApp' }); 
}); 

module.exports = router; 

Из того, что я понимаю, выше обслуживает до индекса, а затем оттуда Угловая маршруты захватывают и загружают частичные шаблоны. Мои Угловые маршруты в public/js/app.js:

angular.module('myApp', ['ngRoute']) 
.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider){ 
    $routeProvider 
     .when('/', { 
      templateUrl: '/views/index.jade', 
      controller: 'IndexCtrl' 
     }) 
     .when('/about', { 
      templateUrl: '/views/about.jade', 
      controller: 'AboutCtrl' 
     }) 
     .otherwise({ redirectTo: '/index' }); 
    }]); 

Так что, когда у меня есть тег ссылки якорь на мой о странице в layout.jade шаблона:

doctype html 
html(lang='en', ng-app='myApp') 
    head 
    title= title 
    link(rel='stylesheet', href='/stylesheets/style.css') 
    base(href='/') 
    body 
     header.header 
     h1.title MY TITLE 
     ul.navbar 
     li 
      a.about(href='/about') About 

    block content 

И я загрузить мой сервер и нажмите на «о» link, я получаю ошибку 404. В моей консоли я вижу 404 для index.jade И для about.jade, но моя домашняя страница загружает содержимое index.jade в любом случае.

Я попытался изменить href в моем якорный тег из /about в #/about, а затем вместо того, чтобы дать мне 404, когда я нажимаю на ссылку, изменения URL в localhost:3000/#/about, но содержание страницы не меняется на всех , Он по-прежнему показывает содержимое index.jade.

Также не уверен, если уместно, когда я нахожусь в localhost: 3000 в браузере, он автоматически добавляет/# /, поэтому полный url показывает http://localhost:3000/#/.

Любая помощь будет принята с благодарностью! Также, пожалуйста, дайте мне знать, если я должен предоставить дополнительную информацию/код. Спасибо!

+0

Где вы загружаете 'public/js/app.js' в' layout.jade'? Похож на отсутствующий тег сценария для 'ui-router' и вашего приложения. Предполагая, что они загружены, похоже, что вам не хватает ['ui-view'] (http://angular-ui.github.io/ui-router/site/#/api/ui.router.state. директива: ui-view) директива – Sean3z

+0

@ Sean3z Является ли 'ui-router' еще одним куском углового? В моем файле 'index.jade' у меня есть теги скриптов для« углового »,« углового маршрута », моего' public/js/app.js' (который содержит мои угловые маршруты) и моего контроллера. Я не знаком с директивой 'ui-view', и я не уверен, что я должен помешать« блочному контенту »Джейд и вместо этого использовать« div (ng-view) »? – fastasleep

+0

Я не знаком с блочным контентом jade, но ui-router действительно требует директивы 'ui-view'. В противном случае я не считаю, что угловые перехватывают изменения маршрута. PS: У вас также есть '.otherwise ({redirectTo: '/ index'}) ;, но не указан маршрут'/index'. – Sean3z

ответ

0

Похоже, что маршруты для просмотров (error.jade и about.jade) не настроены в файле routes.js. Если вы перейдете по ссылке http://localhost:3000/views/about.jade вы что-нибудь видите?

+0

Вы имеете в виду на моих маршрутах/index.js файл? Извините, я новичок в угловой/экспресс. Нет. Я получаю ошибку 404, если попытаюсь просмотреть эту ссылку. Но, как я сказал, layout.jade оказывает, а под ним отображается ошибка 404. Я не уверен, как я должен включать мои взгляды .. с «блочным содержанием» или с «div (ng-view)», и я не могу понять, как правильно направить один из них. – fastasleep

+0

404 означает, что ваши маршруты не настроены для доставки tempaltes в представлениях - этот файл необходимо правильно настроить - outes/index.js –

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