2016-11-08 13 views
0

Im фактически пытается создать полный чат с Sails.js websockets, но im сталкивается с некоторыми проблемами.Получение старых записей из моделей Sails

Мне удастся отправить и получить новые сообщения, когда новый клиент подключится к чату, но я буду новым клиентом получить старые сообщения (например, 20 последних сообщений, отправленных в чате).

Message.js (модель)

module.exports = { 

    attributes: { 
    name : { type: 'string' }, 
    message : { type: 'string' } 
    } 
}; 

MessageController.js (контроллер)

module.exports = { 
    new: function(req, res) { 
     var data = { 
      name: req.param('name'), 
      message: req.param('message'), 
     };  

     Message.create(data).exec(function created(err, message){ 
      Message.publishCreate({id: message.id, name: message.name, message: message.message}); 
     }); 

    }, 

    subscribe: function(req, res) {  
     Message.watch(req); 
    } 
}; 

У меня была идея об использовании функции "найти" на моей модели, но на самом деле не убедительны.

Надеюсь, что я не пропущу что-то большое в отношении возможностей Sails!

Нужна ваша помощь :) Спасибо!

ответ

1
Message.find({sort: 'createdAt ASC'}).exec(function(err, results) { 
    //results is an array of messages 
}); 

http://sailsjs.org/documentation/concepts/models-and-orm/query-language

+0

Итак, в функции подписки контроллера вы передаете новому клиенту предыдущие сообщения? Нет другого и, может быть, чистого способа сделать это? И, делая это, как вы получаете его на клиенте? Я использую AngularJS Controller и испускаю данные, похоже, не триггером события onMessage:/ – AZVR

+0

Вам не нужно делать это в подписке. Паруса имеет чертежи, поэтому вы можете просто сделать запрос GET в/message? Sort = created ASC. ИЛИ, вы можете переписать чертежи парусов и сделать свою собственную функцию «найти» в своем контроллере. Во всяком случае, вам было бы лучше с Экспрессом, чем с парусами. Это будет даже более образованным. – yBrodsky

0

Я добавил этот код на мой подписаться функцию, но я не получаю ничего на клиентской стороне слушать на ('сообщение')

/* Get the last 5 messages */ 
Message.find({sort: 'createdAt DESC'}).limit(5).exec(function(err, messages) { 
    for (var i = 0; i < messages.length; i++) { 
     sails.sockets.broadcast(req.socket, 'message', messages[i]); 
    } 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^