2016-05-12 3 views
0

Wir versuchen, unsere evothings App mit einem Meteorserver zu verbinden.Evothings und ddp

Dazu verwenden wir eine Lib namens asteroid. Wir können jedoch keine Verbindung herstellen und keine Methoden ausführen. Wir sind absolut sicher, dass dies kein Serverproblem ist, da wir einen separaten Client-Code zum Testen haben, der fehlerfrei funktioniert.

Evothings sagt, es sollte mit websockets arbeiten, und wir erhalten keine Fehlerausgabe, aber alle unsere Methodenaufrufe geben nichts zurück. Hier

ist der Code:

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'); 
    } 
} 

Antwort

0

Soweit ich weiß, erfordern die() Funktion funktioniert nur in node.js, nicht in Browser-Umgebung wie Evothings-Viewer oder Cordova, so werden Sie brauche einige alternative Mittel, um die "Asteroid" -Lib zu laden. Browserifizieren?

Wie haben Sie nach der Fehlerausgabe gesucht? Das Evothings Tools Fenster? Wenn ja, haben Sie dieses Snippet zu Ihrer Datei index.html hinzugefügt?

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

Vielleicht ist dieser Fehler nicht ausschließlich in der Evothings-Umgebung. Haben Sie die App in einem normalen Webbrowser getestet?

+0

Ja, ich habe tatsächlich browserify verwendet und die Ausgabe für die Evothings App verwendet. Wir wissen, dass es die Anrufe versucht, da jedes ein Trennungs-Ereignis ausgibt, es verbindet sich nie. Ja, wir haben die Log-Ausgabe im Tools-Fenster mit der ganzen Log-Sache. – Shwiby

+0

Wir haben auch einen funktionierenden Client in einem Webbrowser, der den gleichen Code und die browserify-Ausgabe verwendet. – Shwiby

0

Verwenden Sie geeignete Zertifikate?

Selbstsigniert wird nicht funktionieren. Die Evothings App wird über wss bedient und da sie sozusagen "kopflos" läuft (kein normaler Browser), kann sie den Benutzer nicht nach einem selbstsignierten Zertifikat fragen, so dass es fehlschlägt. Beachten Sie, dass AFAIK ANY Problem mit dem Zertifikat wird es fehlschlagen.

+0

Ich benutze Let 's verschlüsseln für meine Zertifikate auf dem Meteorserver. – Shwiby

+0

Ich schrieb einen Artikel früher, wo ich Letsencrypt mit VerneMQ (https://evothings.com/evothings-does-mqtt-with-vernemq-or-emqtt/) verwendet und eine wichtige Sache ist, dass Sie die FULL-Kette seit Evothings brauchen App enthält keine Zwischenberichte - wie ein normaler Webbrowser. Aber ich habe es funktioniert, also überprüfe diesen Artikel. –

Verwandte Themen