2015-09-23 12 views
14

Podczas gdy kiedyś używana była bardzo dobra dokumentacja do korzystania z gniazd, dzięki Irl Nathon's Sails Cast series. Rzeczy zmieniły się w v0.11, z zespołem żaglowym owijającym i grzebiącymi procedury socket.io.Używanie socket.io z żaglami js

Strona z żaglami np. SailsSocket jest szalenie zwięzły, mówiąc co robić, ale nie jak lub gdzie to zrobić, lub jeśli potrzebuję do npm lub altanka coś. To było szczególnie frustrujące, gdy próbowałem użyć rozmowę o stronie żagli na temat sails.config.sockets. Które nie mogę nawet znaleźć w moich katalogach v0.11.

Po pierwsze, chciałbym wiedzieć, jak i gdzie utworzyć własną odpowiedź na io.socket.get lub .post lub cokolwiek innego. Teraz, kiedy mam zrobić GET z czymś takim:

`io.socket.request({ 
    method: 'get', 
    url: '/sites/2', 
    params: {}, 
    headers: {} 
},function serverResponded(body, JWR){console.log("Body: ", JSON.stringify(body,null, 4)); console.log(' JWR: ', JWR.body)});' 

wrócę:

undefined 
VM1149:7 "Not implemented in core yet" 
VM1149:7 JWR: Not implemented in core yet 

widzę witryn miano w konsoli żagle, ale nic nie spotyka.

Wierzę, że dzieje się tak, ponieważ zdefiniowałem własne trasy i mam własne wyszukiwanie: funkcja w moim kontrolerze witryny i ręcznie muszę coś wcisnąć do gniazda po stronie serwera. Ale jestem zdezorientowany, jak mam wywołać całą stronę z HTTP i tylko tabele z socket.io w tej samej procedurze kontrolera.

  • Gdzie mogę napisać własny niski poziom socket.io procedury, które mogą być wywoływane ze strony internetowej?

  • Czy nadal robię to w pliku app.js?

Żagle Cast pokazały, że się tam robi, ale znowu wszystko się zmieniło.

+0

Czy można [to] (http://stackoverflow.com/questions/40021125/sails-io-js-io-socket-get-user-not-implemented-in-core-yet/40027253#40027253) pomoc w wątku ty? Myślę, że to pytanie jest bardzo podobne ... –

+0

proszę podać więcej informacji na temat konfigurowania haczyków żaglowych –

Odpowiedz

0

Żagle "Żądania wirtualne" (to, co nazywają tym żądaniem HTTP opartym na socket.io) są zwykle używane do pobierania lub przesyłania danych JSON do serwera. Dodatkowo, jeśli skrypt po stronie klienta tworzy żądanie wirtualne, serwer może dodać lub usunąć gniazdo żądające do/z pokoi.

Należy pamiętać, że za pomocą "metody wirtualnej" zostanie ostatecznie uruchomiona ta sama akcja kontrolera, ale zostanie ustawiona wartość req.isSocket = true.

Ten przykład przedstawia widok nadająca widok dla żądań HTML-chcąc jednak zwraca dane JSON dla żądań gniazd opartych na:

... 
// 'get /sites/:id': 'SomeController.showSite' (should be put in your `routes.js`) 
showSite: function(req, res) { 
    // load something from the database 
    Site.findOne(req.param('id')).exec(function(err, site) { 
    // handler errors (same for HTTP or sockets) 
    if (err) return res.serverError(); 
    if (!site) return res.notFound(); 

    if (req.isSocket) return res.json(site); // render JSON response for our `site` object 
    else return res.view('sites/show', {site: site}); // render an HTML view 
    }); 
} 

Co do niskiego poziomu socket.io, żagle zapewnia globalną zmienną io (od sails.io.js), który jest instancją SailsSocket. Pozwala na tworzenie "wirtualnych żądań" HTTP. Więcej informacji here (chociaż wydaje się, że już przeczytałeś wszystko, co można przeczytać o SailsSocket :). Dostęp do podstawowego klienta socket.io można uzyskać za pomocą io.socket._raw.

// do this in the browser. 
// sails.io.js should be included in layout.ejs by default. 
io.socket.get('/site/2', console.log); // "virtual request" 
// neat little trick  ^^^^^^^^^^^  for testing :) 
var rawIO = io.socket._raw; 
rawIO.emit('some:event', "using native socket.io"); 

Mam nadzieję, że to pomoże!