【问题标题】:Anyway to implement Meteor like data subscription in Node.js无论如何要在 Node.js 中实现类似 Meteor 的数据订阅
【发布时间】:2014-05-17 21:22:24
【问题描述】:

我在我的一个项目中使用 Express.js,基本上,我想要实现的目标很简单:

  1. 页面显示从数据 mongodb 集合中提取的条目列表
  2. 当用户添加新条目时,客户端 jQuery 会收集输入并触发对服务器脚本的 AJAX 调用
  3. 服务器代码将数据添加到 mongodb 集合中
  4. 服务器通知客户端重新渲染模板代码,因此列表将被更新

我遇到问题的地方是#4,正如我所提到的,我想让客户端使用更新的数据重新渲染模板,而不是使用 jQuery 操作 dom。

我尝试过使用 socket.io,但是将它与 .ajax 一起使用,另外我必须传递 res 变量,这样我才能做 res.render 只是一团糟......

使用 Meteor.js,数据热推(订阅)是自动完成的,但 Express.js 肯定有办法做到的,对吧?有没有人这样做过?请帮忙!!!

【问题讨论】:

  • 这不是 Meteor 的工作方式。在 Meteor 中,用户的输入在往返服务器之前反映在本地缓存中,这使得动作看起来很即时(这称为延迟补偿)。只有这样,客户端才会将更改操作发送到服务器并等待确认。如果未收到确认,客户端将还原本地更改。
  • 你应该了解meteor内部是如何工作的,然后你就可以自己实现了。
  • 天啊...这么久以来,我一直想接触 Angular,但从来没有机会真正理解它...现在我想我知道我为什么需要它了.. . 是的,像我一样愚蠢,花了这么长时间(从 2012 年底开始......)

标签: node.js express meteor socket.io


【解决方案1】:

无需太多工作,您就可以使用以下内容运行流星服务器:

/server/main.js

CollectionName = new Meteor.Collection("collectionName");

Meteor.publish("some_name", function() {
    return CollectionName.find();
});

然后你可以有一个简单的nodejs应用程序

npm install ddp

app.js

var DDPClient = require('ddp');

var connection = var ddpclient = new DDPClient({
    host: "localhost",
    port: 3000, //Port and IP of your meteor server
});

connection.connect(function(err) {
    connection.subscribe('some_name');
}); 

ddpclient.on('message', function (msg) {
    console.log("ddp message: " + msg);
});

然后,当您将某些内容添加到“collectionName”集合中时,您会在您的快速应用程序中将其取回。不是最理想的(因为您的快速应用程序之间有一个流星应用程序)。但它可以完成工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多