如何使用 Node http 模块发出请求
How to make request with Node http module
如何使用 http.request 向 https://api.urbandictionary.com/v0/define?term=wat 发出获取请求?
当 运行 此代码时,我在关闭前没有收到任何响应:
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();
我发现了三个问题:
- 您需要收听
end
事件,而不是 close
事件
- 您需要使用 https
- 您的路径不正确。它不会在
?
. 之前接受 /
close
事件发生在 req
对象上,而不是 res
对象。
文档中的代码示例 here。我同意文档中的措辞并没有说清楚,但是文档中有多个编码示例显示使用 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();
仅供参考,列出的库 here are higher level than the http.request()
library and are simpler to use for coding like this and very well tested. I highly recommend picking your favorite from that list. I personally use 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);
});
如何使用 http.request 向 https://api.urbandictionary.com/v0/define?term=wat 发出获取请求? 当 运行 此代码时,我在关闭前没有收到任何响应:
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();
我发现了三个问题:
- 您需要收听
end
事件,而不是close
事件 - 您需要使用 https
- 您的路径不正确。它不会在
?
. 之前接受
/
close
事件发生在 req
对象上,而不是 res
对象。
文档中的代码示例 here。我同意文档中的措辞并没有说清楚,但是文档中有多个编码示例显示使用 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();
仅供参考,列出的库 here are higher level than the http.request()
library and are simpler to use for coding like this and very well tested. I highly recommend picking your favorite from that list. I personally use 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);
});