Code Monkey home page Code Monkey logo

backbone-express's Introduction

Backbone-express

Backbone-express is a compatibility layer that allows you to run client-side Backbone applications on the server. With Backbone-express your site will gracefully degrade for clients that don't have JavaScript, including search engines.

This application is useful if (and only if) you want to build a website entirely in JavaScript, yet still need it to be searchable. If you are working on a website that is sort of in between a site and an app, is API-driven, needs to be searchable and you were planning on using Backbone anyway, this is for you.

When not to use Backbone-express?

  • If your website doesn't have a big JavaScript component (most news websites, say), use a server-side framework like Django or Rails or Express instead.
  • If your website is really an app, it makes no sense for Google to index anything and you should use plain Backbone without the overhead of Backbone-express.

Project status

Backbone-express is highly experimental, alpha, under heavy development, however you'd like to call it. Please don't use this... yet.

Installation

npm install backbone-express -g

Getting started

You can turn any Backbone.js app into a Backbone-express app with a couple of easy steps

  1. Load backbone-express.min.js instead of backbone.min.js
  2. Have routers, models and collections extend from Express instead of Backbone, e.g. use Express.Router instead of Backbone.Router
  3. Put models and collections on window.models, routers on window.routers and views on window.views
  4. Start Backbone's history with Backbone.history.start({pushState: true, silent: true}); to enable HTML5 pushState support and to suppress rendering on initial page load (because it's already been rendered server-side)

Now you can serve your app with backbone-express path/to/app.html.

Backbone-express will render your application server-side on initial requests: for clients that don't support JavaScript or when your JavaScript hasn't loaded yet (before your router is activated). Essentially, it translates your Backbone routes into Express.js routes and renders view on the server whenever necessary.

Note that Backbone-express is centered entirely around your routes. If you have views that only render whenever a model changes or whenever an event occurs, but not when a route activated, those will only work client-side. (They won't crash your server, though.) Backbone-express provides graceful degradation on the server, not emulation.

The source code contains a complete example app -- check it out.

Optimization

Backbone-express also minifies and concatenates your JavaScript and modifies your HTML to point to an optimized application.min.js instead, so don't worry about splitting up your application into separate files for models, views and routes.

To learn more about optimization works, look at the documentation for the Railgun application, which takes care of this for Backbone-express.

Advanced usage

Backbone-express has a couple of tricks up its sleeve beyond providing a server-side compatibility layer for Backbone. You're free to use or not use these additional features as you please.

API proxy

If you want to access external APIs through JavaScript without using CORS or JSONP, you can use Backbone-express its built-in API proxy.

To use the API proxy, don't override Collection#url but instead put your API endpoint on Collection#endpoint instead. Backbone-express will then take care of proxying requests to other servers through /api/:collection and /api/:collection/:id routes on the app server.

Preprocessing

Before serving your application, Backbone-express will actually optimize it, preprocess anything it can (such as CoffeeScript, LESS and other CSS preprocessors) and precompile templates (such as Handlebars, Jade or Mustache).

For example, if you have <script src="templates/dashboard.handlebars" type="text/x-handlebars-template"></script> in your html, Backbone-express will precompile that template and make it a part of your application.min.js. Your template would be available under window.Handlebars.templates.

Even the "single page" of your single-page app can be in any template language you choose. Serving backbone-express path/to/app.handlebars will work just fine.

Optimization is taken care of by Railgun, which in turn depends on Tilt.js to preprocess templates, compile-to-JavaScript languages and so forth.

You can look at the documentation for Railgun and Tilt.js to find out more about the optimization and preprocessing capabilities of Backbone-express.

Environments

Backbone-express has support for development environments using Envv, allowing you to change what code executes depending on whether you're in a development or production environment. This can be useful to disable error logging or analytics in development.

Environments can also be useful when using template preprocessors or CoffeeScript. A contrived example:

<script src="models.coffee" data-runtime="build/models.js" />

(The example is contrived because Backbone-express will actually precompile CoffeeScript for you -- see the documentation about preprocessing above.)

Read more about environments and how you can use them in your application in the Envv documentation.

Troubleshooting

To make sure server-side rendering actually works, it makes sense to disable JavaScript in your browser or your testing framework.

backbone-express's People

Contributors

debrouwere avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

berthojoris

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.