Sails.js插座-最佳实践4/2014
我相信在过去的几个月里,sails.js中使用套接字的方式已经发生了变化。对最佳实践应该是什么有些困惑Sails.js插座-最佳实践4/2014,sails.js,Sails.js,我相信在过去的几个月里,sails.js中使用套接字的方式已经发生了变化。对最佳实践应该是什么有些困惑 socket.get('/comment/subscribe', function () { socket.on('comment', function(obj) { if (obj.verb == 'created') { var data = obj.data; if (data.project == 1) { // This adds
socket.get('/comment/subscribe', function () {
socket.on('comment', function(obj) {
if (obj.verb == 'created') {
var data = obj.data;
if (data.project == 1) {
// This adds it to a visual list.
addComment("data.content");
}
}
});
});
我认为这种方法是不可取的。什么是最佳语法套接字订阅
另外-我是否能够订阅模型的特定标准,在本例中是特定注释或其他属性?默认情况下,当您请求模型时,您将订阅该模型。如果您使用的是蓝图,那么这是默认设置。不需要显式订阅 但是,如果您正在制作自己的控制器方法,则需要进行修改。您需要订阅套接字请求,以便在服务器端手动记录更新 假设您有一个
用户
型号
要通知套接字所有创建的
事件,请调用User.watch(req)
对于更新的和销毁的调用用户。订阅(请求,记录)
这是我的项目用户控制器的副本,我在处理订阅的行上添加了注释。希望能有帮助
UserController = {
find: (req, res) ->
User.watch(req) // Subscription
if req.params.all().id
query = User.findOne(id: req.params('id'))
else
query = User.find()
query.exec((err, records) =>
return res.send(500, err) if (err)
User.subscribe(req, records) // Subscription
return res.json(records)
)
create: (req, res) ->
User.create(req.body).exec((err, record) =>
return res.send(500, err) if (err)
User.publishCreate(record, record.toJSON()) // Subscription
return res.json(record.toJSON())
)
update: (req, res) ->
User.update(req.params('id'), req.body).exec((err, records) =>
return res.send(500, err) if (err)
return res.notFound() if _.isEmpty(records)
record = _.first(records)
User.publishUpdate(record.id, record.toJSON()) // Subscription
return res.json(record.toJSON())
)
destroy: (req, res) ->
User.destroy(req.params('id')).exec((err, records) =>
return res.send(500, err) if (err)
return res.notFound() if _.isEmpty(records)
record = _.first(records)
User.publishDestroy(record.id) // Subscription
return res.send(204, null)
)
me: (req, res) ->
User.findOne(
id: req.session.user_id
).done((err, user) =>
User.subscribe(req, user) // Subscription
return res.json(user)
)
}
module.exports = UserController
假设您希望通过套接字从服务器获取一些数据,那么前端的代码应该是这样的
socket.get('/comment/subscribe', function serverResponse(data) {
// use data
})
在commentController的服务器端
subscribe: function(req, res) {
//some logic
res.json({
data: 'some random data'
});
}
这取决于你到底想做什么,但这是基本结构。还请注意,sails使用蓝图,这是一种使一些基本CRUD路线可用的方法,而无需在控制器中对其进行编码。更多信息请参见:
关于问题中以socket.on开头的代码部分,这是客户端的事件侦听器,侦听服务器发送一些数据。比如说
socket.on('room', function messageReceived(message) {
switch (message.verb) {
case 'created':
addRoom(message.data);
break;
case 'addedTo':
postStatusMessage('room-messages-'+message.id, $('#user-'+message.addedId).text()+' has joined');
increaseRoomCount(message.id);
break;
case 'removedFrom':
postStatusMessage('room-messages-'+message.id, $('#user-'+message.removedId).text()+' has left');
decreaseRoomCount(message.id);
break;
case 'destroyed':
removeRoom(message.id);
break;
case 'messaged':
receiveRoomMessage(message.data);
default:
break;
}
});