2016-05-12 25 views
0

我們正試圖將我們的evothings應用程序連接到流星服務器。Evothings和ddp

爲此,我們使用一個名爲asteroid的庫。但是我們無法連接和運行方法。我們絕對確信這不是服務器問題,因爲我們有一些單獨的客戶端代碼用於測試,它完美地運行。

Evothings說它應該使用websockets,並且我們沒有收到任何錯誤輸出,但是我們所有的方法調用都沒有返回任何結果。

下面是代碼:

var _asteroid = require('asteroid'); 

var Asteroid = (0, _asteroid.createClass)('password-login'); 
var asteroid = new Asteroid({ endpoint: 'wss://[url]/websocket' }); 

var currentLogin = null; 

$('#login').submit(function(event) { 
    event.preventDefault(); 
    login($('#login_username').val(), $('#login_password').val()); 
}); 
$('#create').submit(function(event) { 
    event.preventDefault(); 
    newUser($('#create_username').val(), $('#create_password').val(), $('#create_id').val()); 
}); 
$('#occupy').click(function(event) { 
    setStatus(0); 
}); 
$('#vacant').click(function(event) { 
    setStatus(1); 
}); 
$('#refreash').click(function() { 
    getEmptyRooms(); 
}); 

window.newUser = function (username, password, roomId) { 
    $('#create_error').text(''); 
    asteroid.call("accounts.newUser", username, password, roomId).then(function (result) { 
     console.log("Success"); 
     login(username, password); 
    }).catch(function (error) { 
     console.log("Error"); 
     console.error(error); 
     $('#create_error').text(error.message); 
    }); 
} 

window.login = function (username, password) { 
    $('#login_error').text(''); 
    asteroid.loginWithPassword({ username: username, password: password }).then(function (result) { 
     console.log(result); 
     currentLogin = result; 
     $('#current').html('Current User: ' + username); 
    }).catch(function (error) { 
     console.log("Error"); 
     console.error(error); 
     $('#login_error').text(error.message); 
    });; 
} 

window.getEmptyRooms = function() { 
    asteroid.call("rooms.getAvailable").then(function (result) { 
     console.log(result); 
     $('#room_list').empty(); 
     for(i = 0; i < result.length; i++) { 
      $('#room_list').append('<li>' + result[i] + '</li>'); 
     } 
    }).catch(function (error) { 
     console.log("Error"); 
     console.error(error); 
    }); 
} 

window.setStatus = function (status) { 
    $('#status_error').text(''); 
    if (currentLogin != null) { 
     asteroid.call("rooms.setStatus", status).then(function (result) { 
      console.log(result); 
     }).catch(function (error) { 
      console.log("Error"); 
      console.error(error); 
      $('#status_error').text(error.message); 
     }); 
    } else { 
     console.log('please login first'); 
     $('#status_error').text('please login first'); 
    } 
} 

回答

0

據我所知,require()函數只能在node.js中,而不是在瀏覽器環境中,如Evothings瀏覽器或科爾多瓦,所以你需要一些加載「小行星」庫的替代方法。 Browserify?

您是如何查找錯誤輸出的? Evothings工具窗口?如果是這樣,你是否將這個片段添加到你的index.html文件中?

<script> 
    // Redirect console.log to Evothings Workbench. 
    if (window.hyper && window.hyper.log) { console.log = hyper.log } 
</script> 

也許這個錯誤並非Evothings環境所獨有。您是否在常規網絡瀏覽器中測試過該應用程序?

+0

是的,我實際上使用了browserify,並使用輸出的evothings應用程序。我們知道它正在嘗試調用,因爲每個調用都會輸出一個斷開連接事件,但它不會連接。 是的,我們在工具窗口中有整個日誌事件的日誌輸出。 – Shwiby

+0

我們在Web瀏覽器中也有一個工作客戶端,使用相同的代碼和browserify輸出。 – Shwiby

0

您是否使用正確的證書?

自簽名不起作用。 Evothings應用程序通過wss提供服務,並且由於它運行「無頭」(可以說不是普通的瀏覽器),它不會要求用戶允許自簽名的證書,因此它會失敗。請注意,AFAIK ANY問題與證書將使其失敗。

+0

我正在使用讓我們加密我的流星服務器上的證書。 – Shwiby

+0

我之前寫過一篇文章,其中使用了letnecrypt與VerneMQ(https://evothings.com/evothings-does-mqtt-with-vernemq-or-emqtt/),並且重要的一點是您需要自Evothings以來的FULL鏈應用程序沒有任何與它捆綁在一起的中間證書 - 就像普通的網絡瀏覽器一樣。但我明白了,所以請檢查該文章。 –