【问题标题】:loopback access model data and emit using socketio环回访问模型数据并使用 socketio 发出
【发布时间】:2017-03-10 21:12:07
【问题描述】:

我使用 Loopback 作为后端,前端使用 Angularjs。要求是根据某个时间间隔向所有连接的客户端发送数据。

这是我的 server.js 文件:

var loopback = require('loopback');
var boot = require('loopback-boot');   
var app = module.exports = loopback();

app.start = function() {
  return app.listen(function() {
    app.emit('started');
    var baseUrl = app.get('url').replace(/\/$/, '');
    console.log('Web server listening at: %s', baseUrl);
    if (app.get('loopback-component-explorer')) {
      var explorerPath = app.get('loopback-component-explorer').mountPath;
      console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
    }
  });
};

boot(app, __dirname, function(err) {
  if (err) throw err;

  // start the server if `$ node server.js`
  if (require.main === module) {
    //app.start();
    app.io = require('socket.io')(app.start());
    app.io.on('connection', function(socket){
      console.log('a user connected');
       var runs = app.models.runs;
       setInterval(function(){
          //  socket.emit('model', Model.find({limit : 500})); 
        }, 2000);

      socket.on('disconnect', function(){
        console.log('user disconnected');
      });
    });
  }

});

在这里我试图访问我的模型并发出它,但我无法弄清楚如何访问模型数据。

【问题讨论】:

    标签: angularjs node.js loopbackjs strongloop


    【解决方案1】:

    好吧,似乎您已经从代码中得到了想要的东西,但不确定是什么问题。根据要求,您可以将代码更改为此,它应该可以工作:

    var runs = app.models.runs;
    setInterval(function(){
      runs.find({limit : 500})).then(function(results){
        socket.emit('model', results);
      }).catch(console.error);
    }, 2000);
    

    这里有几点需要注意。

    • 不要忘记正确的错误处理。
    • results 变量将是一个包含 500 个文档的数组。对我来说看起来很大,它的性能可能很差。小心点。

    【讨论】:

    • 感谢您的建议,我将更改限制。我面临的问题是 runs.find({limit : 500}) 返回 null 。我不知道我在哪里做错了。虽然从 REST api 访问一切正常,但在节点中它返回 null。
    • 您是否尝试过传递回调? runs.find({ limit: 500 }, function (err, reuslt) { socket.emit('model', results); })
    • 非常感谢,它正在工作。我是节点世界的新手,所以我需要一些时间来弄清楚事情。我看到你在节点方面有很好的经验,所以你能帮忙我出去一点。我的要求是根据从 client 传递的 req 对象发送数据。因此,对于不同的客户端,req 对象会有所不同,服务器发送的数据也会有所不同。客户端只会发出一次req对象,但服务器必须根据收到的req对象重复发送数据。实现这一点的最佳方法是什么?
    • 嗯,你这里的方法应该没问题。虽然确保在套接字断开连接时停止 setInterval。
    • 感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多