如何使用 http.request向https://api.urbandictionary.com/v0/define?term=wat發出 get 請求?運行此代碼時,在關閉之前我沒有收到任何回應:
import { request, METHODS } from 'http';
const options = {
host: 'api.urbandictionary.com',
path: '/v0/define/?term=wat',
pathname: '/v0/define/',
search: 'term=wat',
method: 'GET',
headers: { Accept: 'application/json' }
}
const req = request(options, (res) => {
let resAccum = '';
res.on('data', (chunk) => {
console.log('GOT chunk', chunk);
resAccum = chunk;
});
res.on('close', () => console.log('FINISHED', resAccum)); // FINISHED
res.on('error', err => console.log(err));
});
req.on('error', err => console.log(err));
req.end();
uj5u.com熱心網友回復:
我發現了三個問題:
- 你需要傾聽
end事件,而不是close事件 - 您需要使用 https
- 你的路徑不正確。它不會接受
/前?。
該close事件發生的req物件,而不是res物件。
代碼示例這里的檔案。我同意檔案中的措辭并沒有明確說明這一點,但是檔案中有多個編碼示例顯示res.on('end', ...)用于知道所有回應何時到達。
這是一個也決議 JSON 的作業版本:
import { request } from 'https';
const options = {
host: 'api.urbandictionary.com',
path: '/v0/define?term=wat',
method: 'GET',
headers: { Accept: 'application/json' }
}
const req = request(options, (res) => {
console.log(res.headers);
console.log(res.statusCode, res.statusMessage);
let resAccum = '';
res.on('data', chunk => {
resAccum = chunk.toString();
});
// *** Use end event here ***
res.on('end', () => {
console.log('FINISHED');
const data = JSON.parse(resAccum);
console.log(data);
});
res.on('error', err => console.log(err));
});
req.on('error', err => console.log(err));
req.end();
僅供參考,這里列出的庫比http.request()庫更高級別,并且更易于用于這樣的編碼并且經過很好的測驗。我強烈建議從該串列中選擇您最喜歡的。我個人使用got()是因為我喜歡他們設計界面的方式,但之前串列中的任何一個都是不錯的選擇。
作為參考,使用該got()庫可以實作相同的結果:
import got from 'got';
got("https://api.urbandictionary.com/v0/define?term=wat").json().then(result => {
console.log(result);
}).catch(err => {
console.log(err);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/381086.html
