Anguarl UI-Router с базовыми проблемами с файлами на сервере

Я работаю над "простым" сайтом, чтобы помочь освоить некоторые навыки. Я не использовал стек MEAN более года, и кажется, что я немного заржавел с частью Node/Express в сочетании с Angular Framework. Мне сказали попробовать UI-Router, потому что он поможет с главной целью моего проекта в возможности повторно использовать "шаблон" продукта для примерно 15 URL-адресов, так как моя страница будет заполнена значениями свойств из JSON файл, который содержит информацию о продукте, такую ​​как имя, описание, изображение и т. д.

Я использую только nodemon для обслуживания моего файла server.js, но когда я перехожу на localhost:9000, на вкладке исходного кода в dev-tools не отображается полное дерево файлов. Что я делаю неправильно?

Вот моя установка:

УЗЕЛ / ЭКСПРЕСС server.js

// set up 
var express         = require('express');
var app             = express();
var port            = process.env.PORT || 9000;
var apiRoutes       = require('./app/routes.js');
app.use(express.static(__dirname + '/public/'));
app.use('/node_modules', express.static('/node_modules'));
// routes 
app.use('/', apiRoutes);
// launch 
app.listen(port);

apiRoutes.js

var apiRouter = require('express').Router();
var express = require('express');
apiRouter.get('/', function (req, res, next){
  res.sendFile('index.html', {root: './public/html'})
});
// Exports
module.exports = apiRouter;

УГЛОВОЙ app.js

angular.module(‘myApp’,['ui.router','ngResource']);

app_routes.js

angular.module(‘myApp’)
  .config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider){
$urlRouterProvider.otherwise('/');

$stateProvider
  .state('home', {
    url : '/',
    templateUrl : '/index.html',
    controller  : 'controller_index'
  })
  .state('product', {
    url : '/:id',
    templateUrl : '/template_product.html',
    controller  : 'controller_prods'
  });
  $locationProvider.html5Mode(true)
}]);`

shell.html (содержит мой навигационный и нижний колонтитулы с конкретными представлениями URL внутри)

<html ng-app=“myApp”>
<body ng-controller="controller_shell">
  <Nav goes here>
  </nav>
    <ui-view></ui-view>
</body>
<footer>
</footer>

index.html (загружает содержимое внутри по основному URL www.myapp.com)

<main>
  <div> all the stuff </div>
</main>

template_product.html (динамически загружает содержимое внутри оболочки)

<main>
  <div> all the stuff </div>
</main>

Я не достаточно знаком с Grunt, чтобы сделать процесс сборки, поэтому в настоящее время у меня есть nodemon server.js работает и обслуживает Прямо сейчас, когда я захожу на localhost:9000, он загружает только содержимое index.html, но не загружает все сценарии /css/dependencies из shell.html.

1 ответ

Давайте посмотрим на файл вашего сервера:

Вы запускаете экземпляр сервера на порту 9000, это первая точка.

После этого вы сообщаете серверу, что для любого маршрута, начинающегося с '/', он должен использовать маршрутизатор apiRoutes.

app.use('/', apiRoutes);
//Think of this line of code like defining a middleware which will intercept all request starting with '/'

Следовательно, когда вы переходите на localhost:9000, вы перенаправляетесь на этот маршрутизатор.

Как мы можем видеть здесь:

apiRouter.get('/', function (req, res, next){
  res.sendFile('index.html', {root: './public/html'})
});

Для запроса '/' он отправит файл index.html. Замечательно!

Теперь давайте посмотрим на файл yout index.html:

<main>
  <div> all the stuff </div>
</main>

Это просто шаблон, а не настоящая HTML-страница, которая вам нужна.

AngularJS в одностраничном приложении MVC, следовательно, то, что вам нужно сделать, это:

  • Наличие одной "настоящей" html-страницы со всеми зависимостями и прочим. Эта страница вызывает ваш пользовательский интерфейс.
  • Наличие небольших шаблонов HTML-файлов, которые отображаются в зависимости от состояния UI-маршрутизатора.

Здесь shell.html кажется вашим "настоящим" html-файлом, который вызывает зависимости и ui-маршрутизатор, который позволит вам перемещаться по вашим состояниям.

Конечно, в более сложной структуре то, что я сказал, совершенно неверно. Вы можете иметь более сложные файлы, чтобы лениво загружать некоторые библиотеки, но я думаю, что это не для вас.

Я попытался объяснить это как можно проще, надеюсь, что это поможет, и удачи в разработке со MEAN.

Другие вопросы по тегам