我们正在尝试将我们的evothings应用程序连接到meteor服务器。
为此,我们使用了一个名为asteroid的库。但是,我们无法连接和运行方法。我们绝对确定这不是服务器的问题,因为我们有一些单独的客户端代码用于测试,可以完美地与它一起工作。
Evothing说它应该与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');
}
}发布于 2016-05-14 02:23:05
据我所知,require()函数只能在node.js中工作,不能在Evothings或Cordova等浏览器环境中工作,因此您需要一些加载"asteroid“库的替代方法。Browserify?
您是如何查找错误输出的?Evothings窗口?如果是,您是否将此代码片段添加到index.html文件中?
<script>
// Redirect console.log to Evothings Workbench.
if (window.hyper && window.hyper.log) { console.log = hyper.log }
</script>也许这个错误并不是Evothing环境所独有的。你有没有在普通的网络浏览器上测试过这个应用?
发布于 2016-05-17 14:47:25
您是否使用了适当的证书?
自签名将不起作用。Evothing应用程序通过wss提供服务,由于它运行的是所谓的“无头”(而不是普通的浏览器),它不能询问用户是否允许自签名证书,因此它将失败。请注意,AFAIK证书的任何问题都将使其失败。
https://stackoverflow.com/questions/37196506
复制相似问题