Sails.js publishCreate-未广播的消息

Sails.js publishCreate-未广播的消息,sails.js,Sails.js,我坚持使用publishCreate消息广播,不知道自己做错了什么 创建了一个名为Sample的简单模型: module.exports = { attributes: { device: 'string', value: 'float' }, afterCreate: function(sample, next) { console.log("afterCreate called"); Sample.pu

我坚持使用publishCreate消息广播,不知道自己做错了什么

创建了一个名为Sample的简单模型:

module.exports = {
    attributes: {
        device: 'string',
        value: 'float'
    },

    afterCreate: function(sample, next) {
        console.log("afterCreate called");
        Sample.publishCreate({value: sample.value});
        console.log("publishCreate sent");
        next();
    }
};
在文档中没有找到模型是否自动发布,所以我添加了afterCreate

然后我创建了以下视图:

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" type="text/css" href="/styles/iphone.css">   
    <!-- Bring in the socket.io client -->
    <script type="text/javascript" src="/js/socket.io.js"></script>
    <!-- then beef it up with some convenience logic for talking to Sails.js -->
    <script type="text/javascript" src="/js/sails.io.js"></script>
    <!-- listen on socket.io for incoming messages -->
    <script type="text/javascript" src="/js/app.js"></script>
    <script type="text/javascript">
        socket.on('message', function(msg){
            alert('message received');
        });
    </script>
</head>
<body>
    <div class="block" style="height: 320px;">
        <div class="centered">
            <h1><%= temp %>°</h1>
        </div>
    </div>
</body>
</html>
在上面的视图中,应该在客户端接收一条消息,但是什么也没有发生

我从消息中知道套接字已连接,并且在创建新样本时调用publishCreate


原因是什么?调用res.view()时,我是否也必须在控制器中执行某些操作?

您是否在控制器的创建操作中明确声明了publishCreate

'create': function(req,res,next){
  Sample.create(req.params.all(), function sampleCreated(err,sample){
    if(err){console.log(err); }
   Sample.publishCreate({
    id:sample.id,
    device: sample.device,
    value: sample.value
  });   
 });
},

您可能应该明确声明要发布的数据点。在这里,我设置了要显式发布的Id、设备和值。蓝图和自动控制器映射是有用的,但有时可能会非常不稳定和不可靠,尤其是在缺乏文档的情况下。最好具体点。

这里可能存在的问题是,包含
subscribe
调用的控制器操作是响应HTTP请求而不是套接字请求运行的<当请求通过HTTP时,代码>请求套接字没有意义;服务器不知道使用了什么套接字。为了使
subscribe
工作,必须通过套接字连接发出请求,例如使用
sails.io.js
库中的
socket.get
方法

我们需要使用Model.watch(req)来订阅模型类。然后我们将接收publishCreate()广播


忘了提到,在显示相关视图的控制器方法中,我调用了
Sample.subscribe(req.socket)本教程可能有助于概述socket.io和sails。publishCreate对我也不起作用。1) publishDestroy为我工作,为了确保我的代码正常工作,我只是用publishCreate替换了publishDestroy,然后什么也不广播。
'create': function(req,res,next){
  Sample.create(req.params.all(), function sampleCreated(err,sample){
    if(err){console.log(err); }
   Sample.publishCreate({
    id:sample.id,
    device: sample.device,
    value: sample.value
  });   
 });
},