2014-05-22 7 views
11

Sto provando a eseguire node-inspector con un'applicazione Express 4 - Sto eseguendo questo in una casella di Vagrant ma sono in grado di visualizzare le pagine nel browser senza problemi (ho le porte sul macchina vagabonda disponibile per la macchina host).Node-inspector con Express 4

Accendo l'applicazione con npm start o node --debug bin/www e quindi avvio il debugger del nodo bin/www. Carico l'ispettore nel browser e raggiunge il punto di interruzione iniziale sulla prima riga, ma l'esecuzione di qualsiasi azione sulla pagina per eseguire il debug che potrebbe innescare un punto di interruzione provoca un errore EADDRINUSE (noto anche come la porta è in uso). Sono un po 'sconcertato su cosa potrebbe causare questo, tuttavia, è molto probabile che io stia usando comandi che funzionano su Express 3 anziché su 4. Inoltre, forse c'è qualche configurazione che mi manca per eseguire il debugger sul browser della macchina host ma ispettore in esecuzione sulla scatola vagabonda?

risposta

24

Aggiornamento: Sono abbastanza sicuro che questo è il tuo problema:

nodo --debug bin/www e quindi avviare il nodo-debugger bin/www.

Non fare ENTRAMBE di quelli. È l'uno o l'altro. Sono 2 modi di fare la stessa cosa. Preferisco il modo precedente in quanto è più semplice e funziona con il nodo stesso indipendentemente dal fatto che si stia utilizzando ispettore del nodo.

In sintesi:

  • node-debug bin/www partenza strategico sia la tua applicazione in modalità debug e linfonodo ispettore nello stesso processo
  • node --debug bin/www inizia la vostra applicazione in modalità debug. Questo dovrebbe essere combinato con una finestra di terminale separata in cui si esegue node-inspector come processo separato. Raccomando questo approccio, ma entrambi dovrebbero funzionare.

Ecco il mio suggerimento per iniziare a risolvere questo. Cercate di usare la forma più semplice dei comandi per ottenere tutto in esecuzione:

  • in un terminale sessione SSH all'interno del vostro ospite vagabondo, avviare la vostra applicazione direttamente in primo piano con node --debug ./bin/www
    • v8 cercherà di collegarsi alla porta 5858. Dovresti vedere questo messaggio "debugger listening on port 5858" e NON questo messaggio "Impossibile aprire socket sulla porta 5858, attendere 1000 ms prima di riprovare"
    • Se viene visualizzato il messaggio "Impossibile aprire socket sulla porta 5858" , c'è un altro processo già in ascolto. eseguire sudo netstat -ntlp per vedere quale processo è, comprendere di cosa si tratta e perché è in esecuzione, e poi ucciderlo per liberare il porto kill <pid-you-got-from-netstat>
  • In un terminale sessione ssh separata all'interno del vostro ospite vagabondo, avviare il node- inspector web server node-inspector in primo piano. Assicurati di vedere l'output normale e nessun errore.
  • Ora connette all'URL destra che è probabilmente qualcosa come http://localhost:8080/debug?port=5858 (a meno che il vagabondo IP/porta sono diversi)
  • se si arriva e risolvere eventuali errori imprevisti che si vedono lungo la strada, le cose in realtà dovrebbe funzionare, ma se non pubblicare alcuni dettagli esatti su questo errore EADDRINUSE che vedi. È un'eccezione nella tua app stessa? In tal caso, c'è un'istanza stantia della tua app Express già in esecuzione da qualche altra parte nel tuo host vagabondo e quindi legata alla porta del server web della tua applicazione?
+1

Grazie per l'ottima risposta. Hai perfettamente ragione: l'esecuzione di entrambi stava causando il problema. Per fortuna non c'erano altre cose in esecuzione sulla porta, quindi l'azione più semplice era quella che funzionava :) –

+0

il problema che stavo facendo era eseguire questa linea $ nodemon --debug app.js questo è quello che mi serviva $ nodemon --debug -brk bin/www – blackops

+0

si dovrebbe cambiare la porta a 3000 se la tua app è in esecuzione su 3000 'http: // localhost: 8080/debug? port = 5858' .. anziché 8080. –

0

Lo stesso processo funziona con supervisore.