English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Heute, wenn ich mit nodejs eine HTTP-Anfrage stelle, ist die zurückgegebene Daten ein HTML-Dokument, und ich habe immer noch nach der Methode zur Analyse von JSON-Daten gesucht. Wie erwartet, wurde ein Fehler gemeldet: SyntaxError: Unerwartetes Token in JSON am Position 0
Es gibt keine andere Wahl, als eine andere Methode zu wählen, den empfangenen Buffer-Objekt in toString zu konvertieren und herauszufinden, dass es sich um Zufallszeichen handelt.
Das erste Gefühl ist, dass es ein Kodierungsproblem ist, google afterwards und schauen Sie in die offizielle Dokumentation, ziehen Sie aus drei Methoden zusammen:
1、toString mit Codierungsformat als Parameter hinzufügen.
2、iconv verwenden-Lite-Kodierung ändern.
3、html mit cheerio laden.
Doch keine der oben genannten Methoden war der Ort meines Fehlers, dann habe ich in cnode jemanden gesehen, der ein ähnliches Problem hatte, obwohl es nicht genau dasselbe war, aber jemand hat in den Antworten darauf hingewiesen, dass gzip-komprimiert wird, und das Nichtentpacken führt zu Zerlegung, und ich habe im Header meiner Anfrage tatsächlich gzip-komprimiert = = mit der Hand verdeckt.
Nachdem ich das Problem kannte, war die Lösung sehr einfach.
Lassen Sie uns zunächst npm install zlib ausführen;
Dann habe ich im Header var zlib = require('zlib'); eingeführt.
Dann habe ich die offizielle Dokumentation überprüft und festgestellt, dass es zwei Arten der Dekomprimierung gibt, eine ist synchron und die andere ist asynchron.
Ich habe hier die asynchrone Methode verwendet.
zlib.unzip(chunk, function(error, res) { console.log(error); console.log(res+"); });
Hier ist der chunk unser empfangener buffer-Objekt. Zu beachten ist, dass der asynchrone callback zwei Parameter hat, der erste ist der Fehler, der zweite ist der erforderliche html-String.
Wenn Sie die Synchronisierung verwenden müssen, rufen Sie zlib.unzipSync(buffer); auf; ps: Dies bedeutet, dass ich beim Testen einen Fehler gemeldet habe. Fehler: unerwartetes Dateiende
Gut, bis hierher, mein Problem wurde perfekt gelöst.
Dieses hier ist der gesamte Inhalt, den der Autor allen zur Verfügung gestellt hat, um das Problem zu lösen, dass der Rückgabewert von HTTP-Anfragen in NodeJS html-sprachlich ist. Ich hoffe, es kann allen eine Referenz sein, und ich hoffe, dass alle die Anleitung unterstützt.