Настройка маршрута по умолчанию с помощью Express.js и Backbone.js - PullRequest
3 голосов
/ 07 февраля 2012

Я строю сайт, используя Express и Backbone.js. Я хотел бы справиться как можно больше на переднем конце.

Одна вещь, которая меня смущает, это то, как отложить запросы маршрутизации на Backbone, а не на Express. Я понимаю, что Backbone теперь может обрабатывать такие маршруты, как '/ this / here', но, конечно, Express сначала их интерпретирует.

Какой лучший способ передать это Backbone? Должен ли я создать глобальный маршрут в Express, который обрабатывает все, что я конкретно не определяю?

Ответы [ 3 ]

9 голосов
/ 08 марта 2013

Не уверен, почему первый ответ принят, но это не правильно. Есть два способа справиться с этим.

  1. пользователь поймать все получить в вашем узле экспресс-маршрутов

    app.get "*", (req, res) ->
      res.render "index"
    
  2. использовать перехват всех использования в вашем узле экспресс-маршрутов

    app.use (req, res) ->
      res.render "index"
    

Любой из них должен быть в конце всех ваших маршрутов, так что все другие get для страниц или конечных точек API будут по-прежнему вызываться. Ваш клиентский маршрутизатор MVC перейдет на правильную страницу.

0 голосов
/ 17 мая 2012

Хитрость в том, что ваше приложение должно знать, какие маршруты перехватывать на стороне клиента (например, с помощью Backbone) и на стороне сервера (например, с помощью node.js / Express.js). Это делается с помощью хеша ('#') в URL для ссылок, которые должны быть перехвачены Backbone. URL, не содержащие хеш, будут отправлены на сервер.

Ниже приведен пример добавления маршрутов к объекту Backbone router. Я также добавил маршрут по умолчанию ('* path'), который позволяет Backbone перехватывать любые другие пути на стороне клиента. Обратите внимание, что этот параметр по умолчанию работает только для URL-адресов, содержащих хэш ('#'):

// Configure router.
var AppRouter = Backbone.Router.extend({
  routes: {
    'contact/add': 'addContact',
    '*path': 'defaultPage'
  },
  addContact: function() {
    $content.html('Add');
  },
  defaultPage: function(path) {
    $content.html('Default');
  },
});

// Initialize router.
var appRouter = new AppRouter();
Backbone.history.start(); 

Соответствующая HTML-ссылка будет записана как:

<a href='/#contact/add'>Add</a> 
0 голосов
/ 07 февраля 2012

Я могу быть совершенно ошибочным, но express - это серверная инфраструктура, а магистральная - клиентская.
только серверная инфраструктура отвечает за маршрутизацию в смысле анализа входящих запросов и доставки ресурсов.

я думаю, что вы обращаетесь к маршрутизации ресурсов (выход из мира ruby ​​on rails) в express, то есть каждый ресурс в вашем приложении доступен по релевантной ссылке, например/posts.

Вы можете, чем GET, POST, PUT, DELETE, этот ресурс и платформа отправляет эти типы прямо в правильную бизнес-логику.

маршруты в backbone.js есть (по состоянию намое понимание) чистые клиентские маршруты, которые позволяют вам иметь рабочую историю браузера при создании полноценного ajax-приложения.

Я надеюсь, стало ясно, что обе вещи, хотя и называются одинаково, не совсемто же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...