Node.js服务器向骨干模型发送数据

时间:2013-04-01 18:08:42

标签: javascript node.js backbone.js express socket.io

我正在尝试将socket.io与backbone.js集成,所以基本上我有一个节点服务器从数据库获取数据并将数据发送到骨干客户端,客户端的模型应该以某种方式检索传入的数据但我我不知道如何将socket.io放入模型中,只是在失去尝试后感到困惑。欢迎任何专家,我将不胜感激!

节点服务器在url / pics中向客户端发送数据

app.get('/pics', function(req, res){
    db.collection('pics', function(err, collection) {
        collection.find().toArray(function(err, items) {
            io.sockets.on('connection', function (socket) {
              socket.emit('news', items);
            });  
        });
    }); 
});

Backbone模型中的客户端应检索发出的数据(此模型适用于正常的http数据发送):​​

window.Pic = Backbone.Model.extend({
    urlRoot: "/pics",
    idAttribute: "_id",
    initialize: function (){},
    defaults: {
        _id: null,
        name: "",
        date: "",
    }
});

window.PicCollection = Backbone.Collection.extend({
    model: Pic,
    url: "/pics"
});

1 个答案:

答案 0 :(得分:0)

我必须承认在节点+ socket上使用Backbone.io非常有趣。尽管如此,仍然没有把我的想法付诸实践。首先,您是否考虑过使用插件Backbone作为websockets?有些人创造了这样的。

为了提供另一种方法,我认为你没有太多的选择。使用socket.io来监听传入的数据会产生类似的结果:

socket.on('model', function(attributes) {
  // do something
});

因此,您必须有权访问某些可以手动更新模型的集合。

如果您希望真正使用socket.io INSIDE您的模型,更透明的方法是扩展您的模型以开始在其创建时收听一些自定义事件。我将链接一个jsfiddle以显示可以做什么。

修改: here you go.
请注意,这充满了样板。我正试图找出一种方法来做一个通用的socketModel。如果找到,我会更新。