簡體   English   中英

SailsJS,SocketIO,沒有收到消息

[英]SailsJS, SocketIO, not getting messages

我有一個簡單的登錄腳本。 我在SessionController中創建了一個名為create的方法來處理登錄。 我執行所有必需的驗證,然后將用戶設置為活動並保存它們。 我還使用User.publishUpdate()將消息發送回客戶端。

問題是我根本沒有收到任何消息。 當頁面加載時我調用User.subscribe(req.socket, users); 對於所有用戶,所以他們都訂閱了。 不確定為什么不發送消息。

我使用風帆0.10.0。

這是在頁面加載時調用的subscribe方法:

User.find({}).exec(function (error, users) {
    if (error) {
        res.json({
            error: error
        });
    }

    // Subscribe to the model class
    User.subscribe(req.socket);

    // subscribe to the model instance
    User.subscribe(req.socket, users);

    res.send(200);

});

和登錄的創建方法(刪除與此問題無關的代碼):

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

user.save(function (error, user) {

    if (error) {
        res.send(error, 500);
    }

    User.publishUpdate(user.id, {
        loggedIn: true,
        id: user.id,
        action: ' has logged in'
    });

    res.json(user, 200);
});

我通過套接字將請求發送到訂閱和登錄方法

socket.get('/user/subscribe');

socket.get('/session/create', {//stuff}, callback)

使用Sails v0.10,PubSub已經發生了很大變化,看起來你正在使用一些v0.9.x語義。 您可以在遷移指南和新的模型方法參考中閱讀所有相關內容,但就您的影響而言,主要是:

不再使用“message”事件發布消息。 相反,它們使用模型的標識作為事件名稱發布。 所以,將你的聽眾改為:

socket.on('user', callback)

你會開始聽到一些東西。

與你有關的另一件事是不推薦使用“Model classrooom”,因為使用帶有一個參數的.subscribe()來訂閱它。 而是使用User.watch(req)來獲取有關新創建的用戶的通知。

.watch()方法一起更新sails.config.blueprints (在config/blueprints.js文件中設置)現在還有一個autoWatch選項,如果為true ,將恢復為v0.9.x行為:套接字訂閱模型實例時,它也會開始“觀察”該模型類的“創建”事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM