如何在Sails 0.10.5中创建套接字连接

卡皮尔·沙玛(Kapil Sharma)

我正在尝试使用sailsjs创建一个实时应用程序。我在youtube上看到了教程,在该站点上搜索了简单的解决方案。在github上搜索了运行示例的简单示例。我发现有些工作,但版本较旧。无论我学到什么,发现我都试图在我的应用程序中实现。

那是sessionController.js

var bcrypt = require('bcrypt');
module.exports = {
 'login':function  (req, res) {
    if (req.isSocket) {
        return res.json({status: 403, redirectTo: "/sess/new"});
    } else {
         res.view('sess/new');
    }
 },
 'create': function  (req,res, next) {
    if (!req.param('email') || !req.param('password')) {
        var usernamePasswordRequiredError = [{name : 'usernamePasswordRequired',         message:'You must enter both username and password'}]
        req.session.flash ={
            err: usernamePasswordRequiredError
        }
        res.redirect('/session/login');
        return;
    }
    User.findOneByEmail(req.param('email'), function  (err, user) {
        if (err) return next(err);
        if (!user) {
            var noAccountError = [{name:'noAccount', message:'The email address '+req.param('email')+' not found'}];
            req.session.flash = {
                err:noAccountError
            }
            res.redirect('/session/login');
            return;
        };
        bcrypt.compare(req.param('password'), user.password, function  (err, valid) {
            if (err) return next(err);
            if (!valid) {
                var usernamePasswordMismatchError = [{name:'usernamePasswordMismatch', message:'Invalid username and password combination'}]
                req.session.flash = {
                    err: usernamePasswordMismatchError
                }
                res.redirect('/session/login');
                return;
            };
            req.session.authenticated = true;
            req.session.User = user;
            user.online = true;

            user.save(function  (err,user) {
                if (err) return next(err);
                // Inform other sockets (e.g. connected sockets that are subscribed) that this user is now logged in
                console.log('loged in publishUpdate');
                User.publishUpdate(user.id, {
                    loggedIn: true,
                    id: user.id,
                    name: user.fillname,
                    action: ' has logged in.'
                });


                if (req.session.User.admin) {
                    res.redirect('/user');
                    return;
                };
            });

            res.redirect('/user/');

        });
    });

},
'logout':function  (req, res, next) {

    User.findOne(req.session.User.id, function foundUser (err, user) {
        var userId = req.session.User.id;
        User.update(userId,{
            online:false
        }, function  (err) {
            if (err) return next(err);

            // Inform other sockets (e.g. connected sockets that are subscribed) that the session for this user has ended.
                User.publishUpdate(userId, {
                    loggedIn: false,
                    id: userId,
                    name: user.fullname,
                    action: ' has logged out.'
                });

            req.session.destroy();
            return res.redirect('/session/login');
        });
    });

  }
 };

那是userController.js

 module.exports = {

'signup':function (req, res) {

    if (req.isSocket) {
        return res.json({status: 403, redirectTo: "/user/signup"});
    } else {

        res.view();
    }
},

'create': function (req, res, next) {
    console.log("got sothing "+req.param('fullname'));
    //"req: "+req.param('fullname')
    var params = {
        'fullname' : req.param('fullname'),
        'username' : req.param('username'),
        'email' : req.param('email'),
        'password' : req.param('password')
    };

    User.create( params,function userCreated(err, user) {
        if (err) {
            req.session.flash = {
                err:err
            }
            return res.redirect('/user/signup');
        }

        req.session.authenticated = true;
        req.session.User = user;

        user.online = true;
        user.save(function  (err, user) {
            if (err) return next(err);

            User.publishCreate(user);
            res.redirect('/user/show/'+user.id);
        });


    });
 },

 'update': function (req, res, next) {


    var id = req.param('id');

    var params = {
        'fullname' : req.param('fullname'),
        'username' : req.param('username'),
        'email' : req.param('email')
    };

    User.update(req.param('id'), req.params.all(), function userUpdated(err, user) {
        if(err){
            return res.redirect('/user/edit/'+id);
        } //return// next(err);
        User.publishUpdate(user);
        res.redirect('/user/show/'+id);
    });
},

'show':function (req, res, next) {
  var id = req.param('id');

    User.findOne(req.param("id"), function foundUser (err, user) {
        if(err) return next(err);
        if(!user) return next();

        User.publishUpdate(user);

        res.view({
            user:user
        });
    });
},

'index':function (req, res, next) {

    User.find(function foundUsers (err, users) {
        if(err) return next(err);

        if (req.isSocket) {
            return res.json({status: 403, redirectTo: "/user"});
        } else {

            res.view({
                users:users
            });
        }

    });
},
'edit':function (req, res, next) {

 console.log("got sothing "+req.param('id'));
 var id = req.param('id');

    User.findOne(req.param("id"), function foundUser (err, user) {
        if(err) return next(err);
        if(!user) return next('User does\'t exist.');
        res.view({
            user:user
        });
    });
},
destroy :function (req, res, next) {
    User.findOne(req.param('id'), function foundUser (err, user) {
        if (err) return next(err);
        if (!user) return next('User does\'t exist.');
        User.destroy(req.param('id'), function userDestroyed (err) {
            if (err) return next(err);

            //publish
            User.publishUpdate(user.id, {
                name: user.fullname,
                action: ' has been destroyed.'
            });

            // Let other sockets know that the user instance was destroyed.
            User.publishDestroy(user.id);

        });
        res.redirect('/user');
    });
},
'subscribe':function  (req, res) {
    User.find(function foundUsers (err, users) {

    User.subscribe(req.socket, users);
    res.send(200);
});
}

 };

和那是app.js来接收数据

io.socket.on('connect', function messageReceived() {
  console.log(this.socket.sessionid);

   this.socket.on('message', function (tmessage) {

    console.log(tmessage);
    this.socket.get('/user/subscribe');

  });

});

问题很简单,我在用户注册或注销时或在用户执行任何操作时都没有得到响应。我认为我正确地发布了动作,但不知道接收。如果有人可以指出正确的方向,那将非常有帮助。如果需要,我可以分享更多信息。
我将在github上分享它因此对其他人将大有帮助。
谢谢。

sgress454

您是否阅读了有关足智多趣的pub-sub的官方文档它指出的第一件事是您应该监听以模型命名的事件-因此,如果您想了解User模型发生的事情,则需要执行以下操作:

io.socket.on('user', ...)

不是

io.socket.on('message', ...)

其次,如Jason所述,您需要将套接字订阅到要接收通知的实例。您可以通过自定义subscribe操作来执行此操作,但是如果您已打开REST蓝图(默认设置),则该操作实际上不是必需的;因此,您可以执行此操作。只是在做

io.socket.get('/user', function(data){} )

会将请求的套接字订阅到所有返回的User实例。有关更多信息,请参阅有关blueprint .find()文档该调用不需要出现在io.socket.on调用之前,但不能出现在处理程序中,因为它将永远不会被调用。因此,您可以将客户端代码重写为:

io.socket.on('connect', function socketConnected() {
  console.log(this.socket.sessionid);

   // Respond to user events.  You can always safely use the 
   // global `io.socket` to bind event handlers
   io.socket.on('user', function (tmessage) {

    console.log(tmessage);

   });

   // Get the users and just spit them out to the console.  This will also
   // subscribe the socket to any events involving the returned users, which 
   // will then be handled by the `io.socket.on` code above.
   io.socket.get('/user', console.log.bind(console));


});

有关工作中的各种套接字方法的良好演示,请参见SailsChat示例应用程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Sails 0.10.5中创建套接字连接

来自分类Dev

如何在Powershell中创建一个while循环以计数小于10的数字(最多0)

来自分类Dev

如何在sails.js中省略sails.sockets.broadcast中的两个或更多套接字?

来自分类Dev

如何在Windows 10中的批处理文件中从%〜dp0末尾删除空间

来自分类Dev

如何关闭python中的套接字连接?

来自分类Dev

如何在 Java 矩阵(二维数组)中围绕 10 x 10 0 的矩阵制作 1 的“边界”

来自分类Dev

c# - 如何在C#中的日期低于10的日期时间之前获得0

来自分类Dev

如何在javascript中从0到10分钟运行计时器?

来自分类Dev

如何在Python中处理套接字“连接被拒绝”异常?

来自分类Dev

如何在套接字连接中接收 tcp 标志

来自分类Dev

仅允许连接sails.js中的授权套接字

来自分类Dev

如何在sails中实现MVC模式?

来自分类Dev

如何在D中创建SSL套接字?

来自分类Dev

如何在Ruby中创建双向SSL套接字

来自分类Dev

如何从公共端通过nat创建套接字连接

来自分类Dev

在PHP中,为什么10&10 == 10返回0?

来自分类Dev

如何在sails.js中创建动态策略

来自分类Dev

创建后如何在Sails中访问信息?

来自分类Dev

在Gnuplot中,除了使用像0x10^0这样的服装格式之外,如何设置原点仍然使用0?

来自分类Dev

如何在Sails.js v0.11中触发自定义套接字事件?

来自分类Dev

如何在sails.io.js上监听套接字发射?

来自分类Dev

如何计算PHP套接字中的连接数

来自分类Dev

如何检测流套接字中的中止连接-PHP

来自分类Dev

如何处理套接字程序中的连接重置错误

来自分类Dev

如何处理套接字程序中的连接重置错误

来自分类Dev

如何在Sails.js中执行预定任务

来自分类Dev

如何在Sails.JS中订阅模型实例?

来自分类Dev

如何在sails.js中定义错误消息

来自分类Dev

如何在sails.js中维护多个API版本

Related 相关文章

  1. 1

    如何在Sails 0.10.5中创建套接字连接

  2. 2

    如何在Powershell中创建一个while循环以计数小于10的数字(最多0)

  3. 3

    如何在sails.js中省略sails.sockets.broadcast中的两个或更多套接字?

  4. 4

    如何在Windows 10中的批处理文件中从%〜dp0末尾删除空间

  5. 5

    如何关闭python中的套接字连接?

  6. 6

    如何在 Java 矩阵(二维数组)中围绕 10 x 10 0 的矩阵制作 1 的“边界”

  7. 7

    c# - 如何在C#中的日期低于10的日期时间之前获得0

  8. 8

    如何在javascript中从0到10分钟运行计时器?

  9. 9

    如何在Python中处理套接字“连接被拒绝”异常?

  10. 10

    如何在套接字连接中接收 tcp 标志

  11. 11

    仅允许连接sails.js中的授权套接字

  12. 12

    如何在sails中实现MVC模式?

  13. 13

    如何在D中创建SSL套接字?

  14. 14

    如何在Ruby中创建双向SSL套接字

  15. 15

    如何从公共端通过nat创建套接字连接

  16. 16

    在PHP中,为什么10&10 == 10返回0?

  17. 17

    如何在sails.js中创建动态策略

  18. 18

    创建后如何在Sails中访问信息?

  19. 19

    在Gnuplot中,除了使用像0x10^0这样的服装格式之外,如何设置原点仍然使用0?

  20. 20

    如何在Sails.js v0.11中触发自定义套接字事件?

  21. 21

    如何在sails.io.js上监听套接字发射?

  22. 22

    如何计算PHP套接字中的连接数

  23. 23

    如何检测流套接字中的中止连接-PHP

  24. 24

    如何处理套接字程序中的连接重置错误

  25. 25

    如何处理套接字程序中的连接重置错误

  26. 26

    如何在Sails.js中执行预定任务

  27. 27

    如何在Sails.JS中订阅模型实例?

  28. 28

    如何在sails.js中定义错误消息

  29. 29

    如何在sails.js中维护多个API版本

热门标签

归档