#websocket #socket.io #sails.js #sails.io.js
#websocket #socket.io #sails.js #sails.io.js
Вопрос:
У меня есть базовый интерфейс (html, css, jquery), и я хотел бы использовать sails.io.js для связи с сервером API (разработанным с помощью sails, с включенным cors). API работает на localhost: 10000, но позже он будет находиться в другом домене, отличном от домена веб-клиента.
Непосредственно из jquery я могу отправить некоторый запрос get к этому API и получить ожидаемые результаты.
Когда дело доходит до websocket, у меня возникают некоторые проблемы… В index.html (просто для проверки), я поставил следующее:
<script src="js/sails.io.js"></script>
<script type="text/javascript">
io.sails.url('http://localhost:10000');
io.socket.get('/data', function serverResponded (body, sailsResponseObject) {
// body === sailsResponseObject.body
console.log('Sails responded with: ', body);
console.log('with headers: ', sailsResponseObject.headers);
console.log('and with status code: ', sailsResponseObject.statusCode);
});
</script>
Но инструменты разработчика Chrome говорят мне
ReferenceError: io is not defined
Есть идеи?
Обновить
Я обслуживаю index.html с веб-сервером (python -m SimpleHTTPServer)
Я установил sails.io.js использование беседки.
Я постарался сделать этот тест как можно более простым:
index.html
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<script src="bower_components/sails.io.js/dist/sails.io.js"></script>
<script src="index.js"></script>
</body>
</html>
index.js:
window.onload=function(){
io.sails.url = 'http://localhost:10000';
io.socket.get('http://localhost:10000/data', function (body, response) {
console.log('Sails responded with: ', body);
});
};
Мой sails (0.9.16) API возвращает только объект json на маршруте GET / data.
Я реализовал фиктивную функцию __getcookie в api:
'get /__getcookie': function(req, res, next){
res.json({ok: 123});
}
И прокомментировал строку 481 в interpret.js (Скотт комментирует ниже).
Я также изменил конфигурацию / сокет.js с:
authorization: false,
=> Теперь я могу получить результат из маршрута / data моего API 🙂
Но … при каждом запросе у меня возникает следующая ошибка:
error: Error: No valid session available from this socket.
Ответ №1:
Прежде всего, sails.io.js включает в себя код для socket.io.js , так что нет необходимости пытаться включить это отдельно. Вы должны удалить эту строку:
<script src="bower_components/socket.io/lib/socket.js"></script>
Далее, если вы просто загружаете index.html с диска (вместо того, чтобы обслуживать его с веб-сервера) вам нужно будет указать клиенту сокета Sails, к какому URL-адресу подключаться:
io.sails.url = 'http://localhost:10000';
Поместите это куда угодно, прежде чем начинать выполнять вызовы сокетов; библиотека достаточно умна, чтобы подождать, пока она не подключится, прежде чем пытаться совершать вызовы. Итак, в целом:
window.onload=function(){
io.sails.url = 'http://localhost:10000';
io.socket.get('http://localhost:10000/data', function (body, sailsResponseObject) {
console.log('Sails responded with: ', body);
console.log('with headers: ', sailsResponseObject.headers);
console.log('and with status code: ', sailsResponseObject.statusCode);
});
};
должно работать. Вы должны иметь возможность видеть в консоли, подключен сокет или нет, ища сообщение « io.socket
подключено успешно».
Комментарии:
1. Я полностью выполнил то, что вы описали, но все еще есть некоторые ошибки (я обновил вопрос).
2. Вы не делаете то, что я описал. Вы вызываете
url
как функцию вместо установки переменной. С моей стороны, у меня была опечатка в моем ответе (этоio.socket
неio.sails
так).3. Извините, я виноват. На этот раз все именно так, как вы предложили 🙂 но в итоге я получаю следующее: GET /socket.io/1/?__sails_io_sdk_version=0.10.0amp;__sails_io_sdk_platform=browseramp;__sails_io_sdk_language =javascriptamp;t= 1403848955182 HTTP / 1.1″ 404 —
4. Просто вопрос … может ли эта ошибка быть связана с тем фактом, что я использую sails.io.js 0.10.1 (версия по умолчанию, установленная bower), на котором работает мой сервер sails API 0.9.16?
5. Черт возьми, это неловко, но я был прав в первый раз: это
io.sails.url
неio.socket.url
так. В противном случае он должен работать, иsails.io.js
from Bower должен быть обратно совместим с версией 0.9.16. Я не получаю 404, когда пытаюсь это сделать…
Ответ №2:
-
вы пробовали использовать / перед src, например:
< script src=»js/sails.io.js «>
-
Есть ли у вас sails.io.js в папке /assets/js/ (sails 0.10) или в папке /assets/linker/js (sails 0.9 и ниже).
-
Sails lift скопировал этот файл js в папку .tmp /public/js?
-
Где ваш index.html файл найден?
Комментарии:
1. 1. Я пробовал с / без наилучших результатов. 2. Я использую только sails.io.js сам по себе. 4. index.html это просто тестовый файл сам по себе
2. Мой находится в
asseets/js/dependencies
(v0.11.0), ноhttp://localhost:1337/js/dependencies/sails.io.js
возвращает404
время доступа из/signup
view (<script type="text/javascript" src="/js/dependencies/sails.io.js"></script>
). Что с этим?