Повторное использование магистральных представлений / маршрутов на сервере при использовании Pushstate Backbone.js для SEO / создания закладок - PullRequest
9 голосов
/ 17 августа 2011

Я делаю некоторую тщательную проверку магистрали для одностраничного приложения и задаюсь вопросом, возможно ли повторно использовать те же виды / маршруты от клиента на стороне сервера, чтобы при посещении Google URL-адреса pushstate или прямой доступ к нему, сервер может генерировать тот же HTML, который будет сгенерирован магистралью в клиенте.

Было бы трудно поддерживать два отдельных набора представлений / маршрутов, один на клиенте и один на сервере. Я видел проект backnode на github, но это, похоже, немного упускает из виду, и вам приходится дважды писать один и тот же магистральный маршрутизатор.

Просто интересно, как люди обычно справляются со случаем, когда используют URL-адреса pushstate в магистрали и нуждаются в том же представлении с сервера? Люди дублируют код или есть лучший способ?

Ответы [ 2 ]

5 голосов
/ 01 сентября 2011

Я еще не пробовал, но эти идеи, использующие node.js и магистраль, могут помочь:

http://andyet.net/blog/2011/feb/15/re-using-backbonejs-models-on-the-server-with-node/

http://bennolan.com/2010/08/13/pushstate-and-nodejs.html

По сути, единственный способ сделать так, чтобы вы не писали одно и то же дважды, - это чтобы ваш сервер node.js и клиент внешнего интерфейса использовали один и тот же код маршрутизации / модели. Если вы используете что-то еще на стороне сервера (например, Ruby), вам придется разместить node.js перед вашим сервером приложений. Затем создайте прокси-узел node.js для новых клиентов (push-состояния и client-js) и выполните рендеринг для старых / бот-клиентов.

Другой вариант - делать то, что делает jQuery Mobile, а именно метод Hijax. Идея создать тонны HTML5-страниц (вам нужно посмотреть на его маршрутизацию).

А для полноты вы должны знать, как Google сканирует AJAX: http://code.google.com/web/ajaxcrawling/docs/getting-started.html

0 голосов
/ 07 января 2013

Этот проект делает именно то, что вы пытаетесь сделать.Это может заинтересовать вас, чтобы проверить это.https://github.com/developmentseed/bones

...