Utilisation de backbone.js avec socket.io

J’essaie d’entrer dans le monde de node.js et j’aimerais créer une application de test simple mais complète pour connecter node.js avec socket.io et backbone.js en utilisant Redis comme magasin. J’ai trouvé quelques tutoriels et quelques exemples. D’une certaine manière, je suis confus au sujet de toute l’architecture que je dois utiliser. Habituellement, vous définissez tous vos itinéraires dans votre server.js avec express. Vous obtenez donc un contrôle total de vos itinéraires côté serveur. Maintenant, reliant le backbone, vous devez redéfinir les routes? Cela semble être un aspect modèle, mais pour moi, cela ressemble à un double travail que je n’aime pas du tout. Alors est-ce que je viens de me perdre et que les choses fonctionnent complètement différemment? Peut-être que quelqu’un a un lien vers un bon tutoriel ou un exemple où il est plus clair.

Maintenant, reliant le backbone, vous devez redéfinir les routes?

dépend de ce que vous entendez par itinéraire.

vous devez indiquer à l’épine dorsale où trouver les ressources du serveur afin qu’il soit logique pour un modèle de lui indiquer où l’obtenir (paramètre url dans le modèle).

La classe de route dans le réseau principal n’a rien à voir avec les routes sur le serveur. C’est juste un moyen de changer l’état de l’application ou les vues affichées dans la page.

Par exemple, dans une application métier, vous disposez d’une vue de liste et d’une vue de détail.

Le backbone vous permet de passer d’une vue à l’autre via le routeur sans actualiser la page .

l’URL de la liste pourrait être http://app.com/#list , l’URL de la vue détaillée pourrait être http://app.com/#detail/:id où id serait l’id du produit. vous pouvez basculer entre les vues sans actualiser la page en cliquant simplement sur un lien défini comme

product 1 

et retour à la liste

 product list 

alors vous pouvez avoir une vue qui affiche une forme de produit

 Create a new product 

etc. vous n’avez donc pas besoin de configurer des écouteurs d’événements dans vos vues pour basculer entre des vues qui ne doivent pas être conscientes les unes des autres, et cela sans rien demander au serveur et sans rafraîchir la page. C’est un moyen pratique de structurer votre application.

J’utilise quelque chose de similaire pour le modèle de backbone frontal

 class Model extends Backbone.Model idAtsortingbute: '_id' _sync: (method, model, options) => options.data ?= {} @socket.emit method, @name(), model.toJSON(), options.data, (err, data) => if err then console.error "error in sync with #{method} #{@.name()} with server (#{err})" else options.success(data) sync: (method, model, options) => if @socket.connected() is no @socket.once 'connect', => @_sync method, model, options else @_sync method, model, options name: => if @collection and @collection.name then return @collection.name else throw new Error "Socket model has no name (#{@.collection})" initialize: -> @socket = require('socket') module.exports = Model 

Et voici ma collection de base Backbone

 class Collection extends Backbone.Collection model: require('class/socket/model') _sync: (method, collection, options) => @socket.emit method, @.name, collection.toJSON(), options.data, (err, data) => if err then console.error "error in sync with #{method} #{@.name} with server (#{err})" else options.success(data) sync: (method, collection, options) => if @socket.connected() is no @socket.once 'connect', => @_sync method, collection, options else @_sync method, collection, options garbage: false register: => @socket.emit 'register', @name deregister: => @socket.emit 'deregister', @name @garbage = true initialize: (options) -> @name = options.name if options and options.name if !@name then throw new Error 'Socket collection has no name' @socket = require('socket') # Registrating socket for connection @socket.on 'connect', => @register() if @garbage is off if @socket.connected() is yes then @register() @fetch() # Registration for socket events for this collection @socket.on @name, (method, model) => if method is 'reset' @reset(model) if method is 'delete' m = @get model._id m.sortinggger 'destroy', m, m.collection if method is 'update' m = @get model._id m.set(model) if method is 'create' @add(model) console.log "SOCKET: " + method + " sortingggered for collection " + @name module.exports = Collection; 

C’est CoffeeScript si cela ne vous dérange pas.

Tous les tutoriels que j’ai vus utilisent register / deregister pour les collections.

L’important est de trouver un moyen d’introduire une authentification dans le backend avec ces collections et modèles. Ce n’est pas si difficile, mais c’est délicat.

Veillez également à gérer deux connexions de socket par le même utilisateur. Il doit envoyer la mise à jour du socket au même utilisateur mais à l’autre connexion.