2016-02-10 24 views
5

Sto costruendo un client di app della chat di test con node.js, socket.io e cordova. L'esecuzione del browser cordova run browser si apre su http://localhost:8000. In index.js della mia Cordova client di chat app ho ricevuto il codice per la connessione al mio server side socket.io:Cordova aggiungendo la porta ai collegamenti esterni sul browser run di cordova

var socket = io.connect('https://node-socket.io-address/'); 
socket.on('connect', function() {............. 

problema è che io ricevo questo tipo di errore:

enter image description here

Quindi come puoi vedere c'è una porta (8000) aggiunta al link. Questo problema non si verifica quando eseguo l'app sul dispositivo Android (cordova esegue Android).

Perché cordova sta aggiungendo la porta ai collegamenti esterni?È possibile disabilitare la porta aggiungendo collegamenti esterni al browser di esecuzione cordova?

+0

Hai configurato correttamente CSP (Content-Security-Policy) nel tuo index.html? – robert

+0

In realtà lo rimuovo completamente perché causava altri errori (rifiuto di connettersi al resorce) ma non è il caso;). Perché c'è una porta aggiunta al link inserito in Javascript - con la porta aggiunta alla fine dell'aggiunta di URL non è corretto – born2fr4g

+0

Puoi semplicemente aggiungere la porta https predefinita: 'var socket = io.connect ('https: // node- socket.io-address: 433/'); '(o un'altra porta se diversa) –

risposta

3

Non Cordova si aggiunge la porta al tuo URL, è socket.io cliente, here:

this.port = opts.port || (global.location && location.port ? 
     location.port : 
     (this.secure ? 443 : 80)); 

Quando la porta non è definito, il valore predefinito è la porta di applicazione. Questo è probabilmente un bug in socket.io, poiché ha senso solo se la pagina web e il server sono ospitati dallo stesso nodo. Il tuo problema deriva dal fatto che è Cordova che serve la tua applicazione (su localhost: 8000) e socket.io presuppone che websocket si trovi sulla stessa porta.

Per evitarlo, è necessario aggiungere la porta all'URL o l'oggetto ioni opt.

+0

Questo è quello che pensavo all'inizio - aggiungere la porta al collegamento ma non so quale porta viene utilizzata dalla mia applicazione backend socket.io ospitata su Heroku - Ho provato: 443 (poiché il mio URL Heroku era su https) ma non funzionava;). C'è qualche soluzione (forse una soluzione online) per controllare che la porta abbia solo l'URL? – born2fr4g

+0

Dovresti usare la funzione di routing HTTP di Heroku per farlo. – Koder

+0

Hmm non so come usarlo - ma lo controllerò. Hai qualche consiglio per questo? Comunque grazie per la tua risposta - la taglia è tua;) – born2fr4g