环回访问模型数据并使用 socketio 发出

loopback access model data and emit using socketio

我在后端使用 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');
      });
    });
  }

});

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

嗯,看来你已经从你的代码中得到了你想要的,不知道是什么问题。根据要求,您可以将代码更改为此,它应该可以工作:

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

这里有两点需要注意。

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