2012-10-18 7 views
12

Łączę ze sobą pewien kod node.js, który wywołuje zewnętrzny serwis internetowy i uzyskuję złe wyniki. Chciałbym zarejestrować surowe żądanie i odpowiedź, aby móc je sprawdzić.sposób rejestrowania WYCHODZĄCYCH żądań https z węzła w ramach Webstorm

Oto, co należy zrobić: Nie zużywam biblioteki http bezpośrednio, używam jej przez bibliotekę OAuth.

Dodaję już instrukcje debugowania do kodu biblioteki oauth i nie podoba mi się to. Teraz wygląda na to, że muszę przejść do biblioteki http i zacząć z tym mieszać? To nie może być poprawne.

Gdybym był w oknach, odpaliłbym skrzypka. Znajomy wspomniał o wireshark, ale wireshark mówi mi, że muszę zainstalować X11. Naprawdę? Nie zajadę w tę króliczą dziurę.

Potem próbowałem inspektora węzłów, ale myślę, że to jest kod serwera, a nie kod klienta. Mówi, że masz zamiar rozpocząć proces węzła przed dołączeniem. Cóż, mój proces węzłowy to test case (śluby), który kończy się krótko po rozpoczęciu ... więc nie ma szczęścia.

Myślę, że to byłoby trudne z każdym stosem, ale jeez, to sprawia, że ​​brakuje mi .net!

Jak mogę sprawdzić, co dzieje się z przewodem, gdy korzystam z node.js jako klienta do zewnętrznej usługi sieciowej na lodzie?

dziękuję! Dan

+0

Czy kiedykolwiek miałeś szczęście? –

Odpowiedz

14

Udało się zainstalować hak na prośbę o numer http/https z tego samego powodu.

function requestLogger(httpModule){ 
    var original = httpModule.request 
    httpModule.request = function(options, callback){ 
     console.log(options.href||options.proto+"://"+options.host+options.path, options.method) 
     return original(options, callback) 
    } 
} 

requestLogger(require('http')) 
requestLogger(require('https')) 
+1

Należy pamiętać, że użycie tej metody spowoduje zalogowanie dwukrotnie dla żądań https, ponieważ https.request() właśnie deleguje do http.request(). Wystarczy dodać rejestrowanie do "http" i odgadnąć protokół, sprawdzając, czy istnieje "options._defaultAgent" (który jest ustawiony w "https.request()"). –

+0

Nie jest wystarczająco "options.proto", aby wykryć, czy żądanie używa protokołu http lub https? – Gomino

6

Możesz sprawdzić moduł global-request-logger, która wykorzystuje tę samą technikę, która @uiron wspomniano, ale z większą ilością szczegółów.