3

我在使用SocketCluster作为其发布/订阅的 websocket API 的客户端。

身份验证后,我通过每秒接收一次 json 数据

SCsocket.on('authenticate', function(){
   var channel = SCsocket.subscribe('channel1');
   channel.watch(function(data){
      console.log(data); 
   });
});

形式的

[
  {
      "product": "Product1",
      "price":   "10.0" 
  },
  {
      "product": "Product2",
      "price":   "15.0"  
  }
]

我不会打印数据,而是将其保存到 mongo db。

如果某些数据无法上传,我需要某种安全网。回想起来,允许我将数据从 websocket 上传到 mongo db 的东西。

这样做的最佳做法是什么?我希望这个问题不会太宽泛,我是 node 和 mongo db 的新手。

谢谢!

4

1 回答 1

0

这是一个如何处理数据并将其保存到 Mongo 的示例。我没有运行 mongo 服务器,因此您必须检查保存是否确实有效。但原理是有的。

不确定您所说的安全网是什么意思,但我添加了检查以查看数据是否已定义,您应该针对自己的具体情况进行更多检查。

让我知道您是否需要任何特定的帮助。

SCsocket.on('authenticate', function () {

    // subscribe to channel 1
    var channel = SCsocket.subscribe('channel1');
    channel.watch(function (data) {
        // if there is any data
        // you should do more specific checks here
        if (Object.keys(data).length > 0) {

            // connect to mongo
            MongoClient.connect(url, function(err, db) {

                assert.equal(null, err);

                // insert data
                insertDocument(data, db, function() {
                    db.close(); // close db once insert
                });
            });
        } else {
            // handle invalid data
            console.log('data sent is invalid');
            console.log(data);
        }
    });
});


// insert into mongo
var insertDocument = function (data, db, callback) {

    // save into product
    db.collection('product').insertOne(
        // insert data sent from socket cluster
        data, function (err, result) {
        assert.equal(err, null);
        console.log("Inserted successfully into");
        console.log(result); // output result from mongo
        callback();
    });
};
于 2017-07-27T09:35:27.740 回答