English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Oggi, quando ho effettuato una richiesta HTTP con nodejs, i dati restituiti sono un file html, poi ho seguito il metodo di解析json dati che usavo prima. E così, è saltato un errore: SyntaxError: Token inatteso in JSON alla posizione 0
Non c'è altra scelta, devo cambiare metodo, convertire l'oggetto Buffer ricevuto in toString, poi stamparlo e ho scoperto che è un codice sbagliato.
La prima impressione è un problema di codifica, google per poi vedere la documentazione ufficiale e riassumere tre metodi:
1. Usa toString con la codifica come parametro.
2. Usa iconv-lite per cambiare la codifica.
3. Usa cheerio per caricare html.
Purtroppo, nessuna delle tre metodologie menzionate sopra era il mio errore, poi ho visto che c'era qualcuno con un problema simile su cnode, anche se non identico, qualcuno dei rispondenti ha menzionato l'uso della compressione gzip, che se non è decompressa porta a codice di messa in chiaro, poi ho trovato nel mio header della richiesta la compressione gzip = = mi copro le mani.
Ora che sappiamo dove si trova il problema, la soluzione è molto semplice.
Prima di tutto, facciamo npm install zlib;
Poi includi nella testa var zlib = require('zlib');
Poi consulto la documentazione ufficiale e trovo due modi di decomprimere, uno è sincrono e l'altro è asincrono.
Io qui uso il modo asincrono.
zlib.unzip(chunk,function(error,res){ console.log(error); console.log(res+" });
Qui il chunk è il nostro oggetto buffer ricevuto, è necessario notare che la callback asincrona ha due parametri, il primo sembra essere l'errore, il secondo è la stringa html necessaria.
Se si desidera utilizzare il sincrono, chiamare zlib.unzipSync(buffer); ps: ho ricevuto un errore durante il mio test. Error: unexpected end of file
Bene, qui il mio problema è stato risolto perfettamente.
Ecco tutto il contenuto che ho condiviso con voi su come risolvere il problema del codice di messa in chiaro quando si utilizza una richiesta HTTP in NodeJS che restituisce HTML, spero che sia utile come riferimento, e spero che continuiate a sostenere il tutorial di grida.